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