Метод JavaScript Object.defineProperty () добавляет или изменяет существующее свойство объекта и возвращает объект.
Синтаксис defineProperty()
метода:
Object.defineProperty(obj, prop, descriptor)
Этот defineProperty()
статический метод вызывается по имени Object
класса.
defineProperty () Параметры
defineProperty()
Метод принимает в:
- obj - объект, для которого нужно определить свойство.
- prop - Имя или
Symbol
свойства, которое нужно определить или изменить. - дескриптор - дескриптор для определяемого или изменяемого свойства.
Дескрипторы свойств, присутствующие в объектах, бывают двух типов: дескрипторы данных и дескрипторы доступа. Они могут иметь следующие необязательные свойства.
configurable
enumerable
Дескрипторы данных также могут иметь:
value
writable
Дескрипторы доступа также могут иметь:
get
set
Возвращаемое значение из 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 ()