Javascript Object.defineProperty ()

Metoda JavaScript Object.defineProperty () dodaje lub modyfikuje istniejącą właściwość obiektu i zwraca obiekt.

Składnia defineProperty()metody to:

 Object.defineProperty(obj, prop, descriptor)

defineProperty()Metoda jest metodą statyczną, nazywa się używając Objectnazwy klasy.

defineProperty () Parametry

defineProperty()Sposób odbywa się:

  • obj - obiekt, w którym ma zostać zdefiniowana właściwość.
  • prop - nazwa lub Symbolwłaściwość, która ma zostać zdefiniowana lub zmodyfikowana.
  • descriptor - deskryptor definiowanej lub modyfikowanej właściwości.

Deskryptory właściwości występujące w obiektach są dwojakiego rodzaju: deskryptory danych i deskryptory akcesorów. Mogą mieć następujące opcjonalne właściwości.

  • configurable
  • enumerable

Deskryptory danych mogą również zawierać:

  • value
  • writable

Deskryptory akcesorów mogą również mieć:

  • get
  • set

Wartość zwracana z defineProperty ()

  • Zwraca obiekt, który został przekazany do funkcji.

Uwaga:

  • Domyślnie wartości dodane za pomocą Object.defineProperty()są niezmienne i nie można ich wyliczać.
  • Jeśli deskryptor ma żaden z value, writable, geti setkluczy, jest ona traktowana jako deskryptor danych. Jeśli deskryptor ma oba klucze valuelub writablei getlub set, zostanie zgłoszony wyjątek.

Przykład: dodanie właściwości danych do obiektu

 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

Wynik

 788 Ustawianie wartości… Pobieranie wartości… 6969

Nie możemy mieszać deskryptorów właściwości danych i akcesoriów, ponieważ spowodowałoby to błąd.

Aby zmodyfikować właściwość, właściwość obiektu writablemusi być true, w przeciwnym razie nie zmieni i nie zgłosi błędu w trybie ścisłym.

enumerableAtrybut właściwość określa, czy obiekt jest odbierany przez Object.assign()lub operatora do smarowania.

Te configurablekontrole atrybutów w tym samym czasie, czy nieruchomość może zostać usunięte z obiektu i czy jego atrybutów (innych niż valuea writable) mogą zostać zmienione.

Zalecana lektura: Obiekt JavaScript defineProperties ()

Interesujące artykuły...