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 ()

Цікаві статті...