--- title: getter slug: Web/JavaScript/Reference/Functions/get translation_of: Web/JavaScript/Reference/Functions/get original_slug: Web/JavaScript/Reference/Functions_and_function_scope/get ---
La sintassi get
associa una proprietà dell'oggetto a una funzione che verrà chiamata quando la proprietà verrà richiesta.
La fonte per questo esempio interattivo è memorizzata in un repository GitHub. Se desideri contribuire ai progetti interattivi di esempio, puoi clonare https://github.com/mdn/interactive-examples e inviarci una richiesta di pull.
{get prop() { ... } } {get [expression]() { ... } }
prop
A volte è preferibile consentire l'accesso a una proprietà che restituisce un valore calcolato in modo dinamico, oppure è possibile che si desideri riflettere lo stato di una variabile interna senza richiedere l'uso di chiamate esplicite al metodo. In JavaScript, questo può essere realizzato con l'uso di un getter. Non è possibile avere simultaneamente un getter legato a una proprietà e avere quella proprietà contenuta in un valore, anche se è possibile usare un getter e un setter insieme per creare un tipo di pseudo-proprietà.
Tieni presente quanto segue quando lavori con la sintassi get
:
get
o con un inserimento dati per la stessa proprietà ({ get x() { }, get x() { } }
e { x: ..., get x() { } }
sono vietati).Un getter può essere rimosso usando l'operatore delete
Questo creerà una pseudo-proprietà latest
più recente per object obj
, che restituirà l'ultimo elemento dell'array in log
.
var obj = { log: ['example','test'], get latest() { if (this.log.length == 0) return undefined; return this.log[this.log.length - 1]; } } console.log(obj.latest); // "test".
Si noti che il tentativo di assegnare un valore a latest
non lo cambierà.
delete
Se vuoi rimuovere il getter, puoi semplicemente usare delete
:
delete obj.latest;
defineProperty
Per aggiungere un getter a un oggetto esistente in un secondo momento, usa {{jsxref("Object.defineProperty()")}}.
var o = {a: 0}; Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } }); console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)
var expr = 'foo'; var obj = { get [expr]() { return 'bar'; } }; console.log(obj.foo); // "bar"
I getter ti danno un modo per definire una proprietà di un oggetto, ma non calcolano il valore della proprietà finché non avviene l'accesso. Un getter rinvia il costo del calcolo del valore fino a quando il valore è necessario e, se non è mai necessario, non si paga mai il costo.
Un'ulteriore tecnica di ottimizzazione per lazificare o ritardare il calcolo di un valore di una proprietà e memorizzarla nella cache per un accesso successivo sono smart o memoized getters. Il valore viene calcolato la prima volta che viene chiamato il getter e viene quindi memorizzato nella cache in modo che gli accessi successivi restituiscano il valore memorizzato nella cache senza ricalcolarlo. Questo è utile nelle seguenti situazioni:
Ciò significa che non si dovrebbe usare un getter pigro per una proprietà il cui valore si prevede possa cambiare, poiché il getter non ricalcola il valore.
Nell'esempio seguente, l'oggetto ha un getter come proprietà propria. Quando si ottiene la proprietà, la proprietà viene rimossa dall'oggetto e riaggiunta, ma questa volta implicitamente come proprietà dei dati. Alla fine il valore viene restituito.
get notifier() { delete this.notifier; return this.notifier = document.getElementById('bookmarked-notification-anchor'); },
Per il codice di Firefox, vedere anche il modulo del codice XPCOMUtils.jsm, che definisce la funzione defineLazyGetter()
.
Specification | Status | Comment |
---|---|---|
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}} | {{Spec2('ES5.1')}} | Definizione iniziale. |
{{SpecName('ES2015', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ES2015')}} | Aggiunti nomi di proprietà calcolate. |
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.functions.get")}}