Как метод Object.defineProperty предотвращает перезапись свойств

#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 является примитивным строительным блоком языка.