Есть ли способ добавить «скрытые» неперечислимые свойства к объекту JavaScript, который работает кросс-браузер?Как добавить неперечислимое свойство в JavaScript для IE8?
Для большинства современных браузеров, вы можете сделать:
Object.defineProperty(obj, '__id__', { enumerable: false, value: id++ });
Для некоторых старых браузеров не-IE, которые не имеют Object.defineProperty
, вы можете использовать the __proto__
hack.
Ни один из них, однако, не работает для IE. Есть ли способ сделать это в IE8 (было бы здорово, если IE7 тоже, но не обязательно)?
Основная цель - добавить свойства трекера к любому объекту JavaScript {}
, но при вызове JSON.stringify(obj)
он не входит в состав объекта. Я понимаю, что вы можете добавить пользовательские функции замены JSON (в основном расширяя функциональность JSON.stringify
), но я не большой поклонник этого, потому что это означает, что когда вы сериализовали эти отслеживаемые объекты JavaScript в JSON, вам нужно было бы знать/не забывать добавлять что функция замены, которая довольно непрактична.
Есть ли способ сделать это?
Вы говорите, что IE8 +, но не работает 'Object.defineProperty()' в IE9? – nnnnnn
О да, наверное, я имею в виду IE8. Если есть способ поддержать IE7, это было бы потрясающе, но в основном просто, как это сделать в IE8. Обновленный вопрос. –