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

Интересни статии...