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

Резюме

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

преамбула

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

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

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

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

Но, согласно ECMA-262 5.1 Edition / June 2011 (стр. № 17, стр. 29), ограничение ReservedWord влияет только Identifier, но нет IdentifierName:

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

(...) Идентификатор - это IdentifierName, которое не является ReservedWord (см. 7.6.1). (...)

Синтаксис

Identifier ::
    IdentifierName but not ReservedWord

И, согласно ECMA-262 5.1 Edition / June 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.

0 ответов

Другие вопросы по тегам