Обходной путь, позволяющий использовать зарезервированные слова в качестве имен свойств в 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.