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