#javascript
#javascript
Вопрос:
Как Object.defineProperty работает для перезаписи реквизитов. Реализовано ли это с использованием механизмов js (возможно ли реализовать ту же функциональность с помощью js?)?
Комментарии:
1.ecma-international.org/ecma-262/#sec-object.defineproperty ?
2. Спасибо, @zerkms. Но что мне интересно знать, выполняется ли эта функциональность (перезапись реквизитов объекта) на уровне языка или во время компиляции.
3. Спасибо, @JaromandaX!! Итак, не могли бы вы предоставить краткий пример (customDefineProperty) того, как реализовать ту же функциональность, скажем, только для перезаписи реквизитов объекта, но заставить эту пользовательскую функцию вести себя так же. Я имею в виду выполнение чего-то вроде: customDefineProperty(obj, ‘name’, {writable: false}) obj.name = «str» не должен изменять значение имени свойства
4. @JaromandaX :))) пусть customDefineProperty = Object.defineProperty — это не реализация, это просто ссылка на собственную функцию. Под реализацией я подразумеваю пользовательскую функцию с телом, без использования собственных методов. Другими словами, представьте, что вам нужно создать такую же функциональность для некоторых IE 2 или 3, и поскольку он не поддерживает Object.defineProperty, вам нужно будет написать некоторое полизаполнение, возможно ли это просто с помощью js? Возможно ли повторить то же поведение?
5.
Object.defineProperty
это единственный способ сделать это — он не является полизаполняемым — вы можете эмулировать его функциональность создания свойств, но вы не можете эмулировать функциональность создания вещей, доступных только для чтения / неперечисляемых / не настраиваемых
Ответ №1:
Как
Object.defineProperty
работает для перезаписи реквизитов.
Путем доступа к внутреннему определению свойства (называемому «атрибутами свойства» в спецификации).
Реализовано ли это с использованием механизмов js и возможно ли реализовать ту же функциональность с помощью js?
Нет. Object.defineProperty
является примитивным строительным блоком языка.