Il metodo JavaScript Object.defineProperty () aggiunge o modifica la proprietà esistente su un oggetto e restituisce l'oggetto.
La sintassi del defineProperty()
metodo è:
Object.defineProperty(obj, prop, descriptor)
Il defineProperty()
metodo, essendo un metodo statico, viene chiamato utilizzando il Object
nome della classe.
parametri defineProperty ()
Il defineProperty()
metodo comprende:
- obj - L'oggetto su cui definire la proprietà.
- prop - Il nome o
Symbol
della proprietà da definire o modificare. - descrittore - Il descrittore della proprietà da definire o modificare.
I descrittori di proprietà presenti negli oggetti sono di due tipi: descrittori di dati e descrittori di accesso. Possono avere le seguenti proprietà opzionali.
configurable
enumerable
Un descrittore di dati può anche avere:
value
writable
I descrittori di una funzione di accesso possono anche avere:
get
set
Valore restituito da defineProperty ()
- Restituisce l'oggetto passato alla funzione.
Nota:
- Per impostazione predefinita, i valori aggiunti utilizzando
Object.defineProperty()
sono immutabili e non enumerabili. - Se un descrittore ha né di
value
,writable
,get
eset
chiavi, viene trattata come un descrittore di dati. Se un descrittore ha le chiavivalue
owritable
eget
oset
, viene generata un'eccezione.
Esempio: aggiunta di una proprietà dati all'oggetto
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
Produzione
788 Impostazione del valore … Ottenere valore … 6969
Non è possibile combinare descrittori di proprietà dei dati e delle funzioni di accesso poiché genererebbe un errore.
Per modificare una proprietà, la proprietà dell'oggetto writable
deve essere true
, altrimenti non modificherà e genererà errori in modalità rigorosa.
L' enumerable
attributo della proprietà definisce se la proprietà viene scelta da Object.assign()
o dall'operatore di diffusione.
L' configurable
attributo controlla allo stesso tempo se la proprietà può essere cancellata dall'oggetto e se i suoi attributi (diversi da value
e writable
) possono essere modificati.
Letture consigliate: oggetto Javascript defineProperties ()