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








