Metoden JavaScript Object.defineProperty () lägger till eller modifierar befintlig egenskap på ett objekt och returnerar objektet.
Syntaxen för defineProperty()
metoden är:
Object.defineProperty(obj, prop, descriptor)
Den defineProperty()
metod, som är en statisk metod, kallas med hjälp av Object
klassnamnet.
defineProperty () Parametrar
Den defineProperty()
metod tar in:
- obj - Objektet som egenskapen ska definieras på.
- prop - Namnet eller
Symbol
den fastighet som ska definieras eller ändras. - descriptor - Beskrivningen för egenskapen som definieras eller ändras.
Egenskapsbeskrivare som finns i objekt är av två typer: dataskrivare och accessorbeskrivare. De kan ha följande valfria egenskaper.
configurable
enumerable
En databeskrivare kan också ha:
value
writable
En accessorbeskrivare kan också ha:
get
set
Returvärde från defineProperty ()
- Returnerar objektet som skickades till funktionen.
Notera:
- Som standard är värden som läggs till med
Object.defineProperty()
oföränderliga och räknas inte. - Om en deskriptor har någon av
value
,writable
,get
ochset
nycklar, är det behandlas som en databeskrivning. Om en deskriptor har bådavalue
ellerwritable
ochget
ellerset
nycklar kastas ett undantag.
Exempel: Lägga till en dataegenskap till objektet
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
Produktion
788 Ställa in värde … Få värde … 6969
Vi kan inte blanda både data- och accessoregenskapsbeskrivare eftersom det skulle orsaka ett fel.
För att modifiera en egenskap writable
måste objektets egendom vara true
, annars kommer det inte att modifieras och kasta fel i strikt läge.
Den enumerable
egenskapen attribut definierar om fastigheten plockas av Object.assign()
eller spridning operatör.
De configurable
attribut kontroller samtidigt huruvida egenskapen kan raderas från objektet och om dess attribut (andra än value
och writable
) kan ändras.
Rekommenderad läsning: Javascript Object defineProperties ()