Object.defineProperty()

Object.defineProperty() - визначає нову або змінює існуючу властивість безпосередньо на об'єкті, повертаючи цей об'єкт.

Синтаксис:

Object.defineProperty(obj , prop, descriptor );

Параметри:

obj - Об'єкт, на якому визначаються властивість.

prop - Ім'я визначеної або змінювальної властивості.

descriptor - Дескриптор визначеної або змінювальної властивості.

Опис:

Цей метод дозволяє точно додавати або змінювати властивості об'єкта. Звичайне додавання властивостей через присвоювання(obj={p.1};) створює властивості, які можна побачити через перерахування властивостей (за допомогою циклу for ... in або методу Object.keys), чиї значення можуть бути змінені і які можуть бути видалені. Цей же метод дозволяє налаштувати ці додаткові деталі властивості.

Дескриптори властивостей, присутні в об'єктах, бувають двох основних типів: дескриптори даних і дескриптори доступу.

Дескриптор даних - це властивість, що має значення, яке може бути (а може і не бути) записуватися.

Дескриптор доступу - це властивість, що описується парою функцій - гетером і сетером. Дескриптор може бути тільки чимось одним з цих двох типів; він не може бути одночасно обома.

І дескриптор даних, і дескриптор доступу є об'єктами. Вони володіють наступними обов'язковими ключами:

Майте на увазі, що ці ключі не обов'язково повинні належати самому дескриптору властивості, якщо вони успадковані, вони так само будуть прийматися до уваги. Для збереження цих ключів за замовчуванням незмінними, ви можете заздалегідь заморозити Object.prototype, явно визначивши всі ключі, або встановити властивість __proto__ в null.

Приклад:

var obj={}; // використання __proto__ Object .defineProperty( obj , 'key' , { __proto__ : null, // немає успадкованих властивостей value : 'static' // по замовчуванню }); var ob = {}; // створюємо обєкт // Приклад добавленя властивостей до обєкту через Object.defineProperty Object.defineProperty( ob, 'a' , { value : 7 , writable : true, enumerable : true, configurable : true }); //ob.a=7; var d = {}; // Створюємо обєкт Object.defineProperty( d, 't' , { value : 6.3 , writable : false }); d.t = 10; //не присвоїть alert(d.t); //d.t не змінилося, d.t=6.3