Метод JavaScript Object.defineProperty () добавляет или изменяет существующее свойство объекта и возвращает объект.
Синтаксис defineProperty()метода:
Object.defineProperty(obj, prop, descriptor)
Этот defineProperty()статический метод вызывается по имени Objectкласса.
defineProperty () Параметры
defineProperty()Метод принимает в:
- obj - объект, для которого нужно определить свойство.
- prop - Имя или
Symbolсвойства, которое нужно определить или изменить. - дескриптор - дескриптор для определяемого или изменяемого свойства.
Дескрипторы свойств, присутствующие в объектах, бывают двух типов: дескрипторы данных и дескрипторы доступа. Они могут иметь следующие необязательные свойства.
configurableenumerable
Дескрипторы данных также могут иметь:
valuewritable
Дескрипторы доступа также могут иметь:
getset
Возвращаемое значение из defineProperty ()
- Возвращает объект, переданный функции.
Заметка:
- По умолчанию значения, добавленные с помощью,
Object.defineProperty()являются неизменяемыми и не перечисляемыми. - Если дескриптор имеет ни один из
value,writable,getиsetключей, она рассматривается в качестве дескриптора данных. Если в дескрипторе есть ключиvalueилиwritableиgetилиset, генерируется исключение.
Пример: добавление свойства данных к объекту
let obj = (); // with a data property descriptor Object.defineProperty(obj, "property1", ( value: 788, writable: true, enumerable: true, configurable: true, )); console.log(obj.property1); // 788 // with an accessor property descriptor Object.defineProperty(obj, "property2", ( get() ( console.log("Getting Value… "); return val; ), set(newVal) ( console.log("Setting Value… "); val = newVal; ), enumerable: true, configurable: true, )); obj.property2 = 6969; // Setting Value… console.log(obj.property2); // 6969
Вывод
788 Значение настройки… Получение значения… 6969
Мы не можем смешивать дескрипторы свойств данных и средств доступа, так как это вызовет ошибку.
Чтобы изменить свойство, свойство объекта writableдолжно быть true, иначе оно не изменится и не выдаст ошибку в строгом режиме.
enumerableАтрибут свойства определяет , является ли свойство выбрано Object.assign()или расширенного оператором.
В configurableконтроле атрибутов в то же время , является ли свойство может быть удалено из объекта и является ли его атрибутов (кроме valueи writable) может быть изменен.
Рекомендуемая литература: Javascript Object defineProperties ()








