Javascript Object.defineProperty ()

Метод 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 ()

Интересные статьи...