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 Object
nazwy klasy.
defineProperty () Parametry
defineProperty()
Sposób odbywa się:
- obj - obiekt, w którym ma zostać zdefiniowana właściwość.
- prop - nazwa lub
Symbol
wł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
,get
iset
kluczy, jest ona traktowana jako deskryptor danych. Jeśli deskryptor ma oba kluczevalue
lubwritable
iget
lubset
, 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 writable
musi być true
, w przeciwnym razie nie zmieni i nie zgłosi błędu w trybie ścisłym.
enumerable
Atrybut właściwość określa, czy obiekt jest odbierany przez Object.assign()
lub operatora do smarowania.
Te configurable
kontrole atrybutów w tym samym czasie, czy nieruchomość może zostać usunięte z obiektu i czy jego atrybutów (innych niż value
a writable
) mogą zostać zmienione.
Zalecana lektura: Obiekt JavaScript defineProperties ()