Обходной путь, позволяющий использовать зарезервированные слова в качестве имен свойств в IE8?

Резюме

Я хочу использовать class в качестве имени свойства объекта и обращаться к нему с помощью записи через точку.

Преамбула

Я уже знаю, что согласно ECMA-262 5.1 Edition / июнь 2011 г. (номер страницы 19, страница 31), class - это зарезервированное слово будущего:

7.6.1.2 Будущие зарезервированные слова

(...) Синтаксис

FutureReservedWord :: one of
    class    enum    extends    super
    const    export  import

Но, согласно ECMA-262, издание 5.1 / июнь 2011 г. (номер страницы 17, страница 29), ограничение не быть ReservedWord влияет только на Identifier, но не на IdentifierName:

7.6 Имена идентификаторов и идентификаторы

(...) Identifier — это IdentifierName, которое не является ReservedWord (см. 7.6.1). (...)

Синтаксис

Identifier ::
    IdentifierName but not ReservedWord

И, согласно ECMA-262, издание 5.1 / июнь 2011 г. (номер страницы 67, страница 79), имя свойства объекта представляет собой IdentifierName вместо Identifier:

11.2.1 Средства доступа к свойствам

Доступ к свойствам осуществляется по имени с использованием записи через точку:

MemberExpression . IdentifierName
CallExpression . IdentifierName

или запись в скобках:

MemberExpression [ Expression ] CallExpression [ Expression ]

Точечная запись объясняется следующим синтаксическим преобразованием:

MemberExpression . IdentifierName

по своему поведению идентичен

MemberExpression [ <identifier-name-string> ]

Проблема

Проблема в том, что некоторые несовместимые браузеры выдают ошибку при использовании зарезервированных слов в качестве имен свойств:

var obj = {class: foo};   // error
var obj = {'class': foo}; // ok
obj.class;                // error
obj['class'];             // ok

Что я хочу

Конечно, я мог бы использовать скобочную нотацию вместо точечной, но с методами получается некрасиво, потому что скобок слишком много:

o.if().class('foo').implements('bar').use().native().interface() // looks good
o['if']()['class']('foo')['implements']('bar')['use']()['native']()['interface']() //ugly

Затем я хочу грязный хак (например, поведение HTC или что-то в этом роде), который при включении с использованием условных комментариев заставляет точечную запись работать с зарезервированными словами в IE8.


person Oriol    schedule 20.02.2014    source источник
comment
Я не могу себе представить, что такое возможно. Среда выполнения JScript в IE8 будет делать то, что она собирается делать.   -  person Pointy    schedule 20.02.2014
comment
@Pointy Я тоже настроен скептически, но хотел спросить на всякий случай   -  person Oriol    schedule 20.02.2014