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.
configurableenumerable
Deskryptory danych mogą również zawierać:
valuewritable
Deskryptory akcesorów mogą również mieć:
getset
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,getisetkluczy, jest ona traktowana jako deskryptor danych. Jeśli deskryptor ma oba kluczevaluelubwritableigetlubset, 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 ()








