getter

This article needs a technical review. How you can help.

This article needs an editorial review. How you can help.

la sintaxi get lliga la propietat d'un objecte a una funció que es cridarà quan la propietat sigui cercada.

Sintaxi

{get prop() { ... } }
{get [expressió]() { ... } }

Paràmetres

prop
El nom de la propietat que es pretén lligar a la funció donada.
expressió
A partir d'ECMAScript 6, també es pot utilitzar expressions per a calcular el nom d'una propietat a lligar a la funció donada.

Descripció

A vegades és desitjable permetre l'accès a una propietat que retorna un valor calculat dinàmicament, o potser es vol reflectir l'estat d'una variable interna sense ésser necessari l'ús de crides explícites a mètodes. En JavaScript, Això es pot aconseguir utilitzant un getter. No és possible tenir simultàniament un lligam a una propietat i que aquesta mateixa propietat contingui un valor, tot i que sí és possible utilitzar un getter i un setter en conjunt per crear un tipus de pseudo-propietat.

Tingueu en compte el següent quan treballeu amb la sintàxi get:

Un getter pot ser eliminiat utilitzant l'operador delete.

Exemples

Definir un getter en nous objectes, en inicialitzadors d'objectes

Això crearà una pseudo-propietat latest per l'objecte obj, el qual retornarà l'últim ítem de l'array en log.

var log = ['test'];
var obj = {
  get latest () {
    if (log.length == 0) retorna undefined;
    return log[log.length - 1]
  }
}
console.log (obj.latest); // Retornarà "test".

Recordeu que intentar assignar un valor a latest no el canviarà.

Eliminar un getter utilitzanr l'operador delete

Si voleu eliminar el getter, simplement utilitzeu delete:

delete obj.latest;

Definir un getter en objectes existents utilitzant la Propietat define

Per annexar un getter a un objecte existent posteriorment en qualsevol moment, utilitzeu Object.defineProperty().

var o = { a:0 }

Object.defineProperty(o, "b", { get: function () { return this.a + 1; } });

console.log(o.b) // Executa el getter, el qual produeix a + 1 (que és 1)

Utilitzar un nom de propietat calculat

Nota: Les propietats calculades són una tecnologia experimental, que forma part de la proposta d'ECMAScript 6, i encara no estàn ampliament suportats pels navegadors. Això llençarà un error de sintàxi en entorns que no les suportin.

var expr = "foo";

var obj = {
  get [expr]() { return "bar"; }
};

console.log(obj.foo); // "bar"

 Getters smart / self-overwriting / lazy

Getters et donen una forma de definir una propietat d'un objecte, però aquests no calculen el valor de la propietat fins que no s'hi ha accedit. getter posposen el cost de calcular el valor fins el moment en que es necessiti el valor, i si no és mai necessari, mai es pagarà el cost.

Una tècnica d'optimització addiccional per retardar o realitzar de forma lenta el càlcul del valor d'una propietat i guardar-ho per a accedir-hi posteriorment són els getters smart o memoized . El valor és calculat el primer cop que es crida el getter, i és llavors guardat per tal els accessos subsegüents retornin el calor guardat en caché sense recalcular-lo. Això és útil en les situacions següents:

  • Si el càlcul del valor d'una propietat és car (utilitza massa RAM o massa temps de CPU, spawns worker thread, recupera els arxius remots, etc).
  • Si el valor no és necessari ara mateix. S'utilitzarà després, o en alguns casos no s'utilitzarà mai.
  • Si s'utilitza, serà accedit diverses vegades, i no hi ha necessitat de recalcular el valor que no es canviarà, o no s'hauria de recalcular.

Això vol dir que no haurieu d'utilitzar un getter lazy per una propietat el valor de la qual espereu canviar, ja que el getter no recalcularà el valor.

En l'exemple següent, l'objecte té un getter com propietat pròpia. Obtenint la propietat, la propietat s'elimina de l'objecte i es reafegeix, però implícitament com a propietat de tipus data aquest cop. Finalment el valor es retorna.

get notifier() {
  delete this.notifier;
  return this.notifier = document.getElementById("bookmarked-notification-anchor");
},

Per codi Firefox, vegeu també el mòdul de codi XPCOMUtils.jsm, el qual defineix la funció defineLazyGetter().

Especificacions

Especificació Estat Comentaris
ECMAScript 5.1 (ECMA-262)
The definition of 'Object Initializer' in that specification.
Standard Definició inicial.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Method definitions' in that specification.
Standard Noms de propietats calculats afegits.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Method definitions' in that specification.
Draft  

Compatibilitat amb navegadors

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suport bàsic 1 2.0 (1.8.1) 9 9.5 3
Noms de propietats calculats 46 34 (34) No support No support No support
Feature Android Chrome per Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suport bàsic (Yes) (Yes) 1.0 (1.8.1) (Yes) (Yes) (Yes)
Noms de propietats calculats 47 No support 34.0 (34.0) No support No support No support

Vegeu també

Document Tags and Contributors

 Contributors to this page: llue
 Last updated by: llue,