setter

Il costrutto sintattico set collega una proprietĂ  di un oggetto ad una funzione che viene chiamata quando si ha un tentativo di modifica di quella proprietĂ .

Sintassi

{set prop(val) { . . . }}
{set [expression](val) { . . . }}

Parametri

prop
Il nome della proprietĂ  da collegare alla funzione data.
val
Un alias per la variabile che contiene il valore che si sta cercando di assegnare a prop.
expression
A partire da ECMAScript 6, è possibile anche usare espressioni per nomi di proprietà computate da collegare alla funzione data.

Descrizione

In JavaScript, un setter può essere utilizzato per eseguire una funzione ogniqualvolta una proprietĂ  specificata sta per essere modificata. I setters sono quasi sempre utilizzati insieme ai getters per creare un tipo di pseudo proprietĂ . Non è possibile avere un setter su una normale proprietĂ  che contiene un valore.

Alcune note da considerare quando si utilizza il costrutto sintattico set:

Un setter può essere eliminato usando l'operatore delete.

Esempi

Definire un setter per nuovi oggetti in inizializzatori di oggetti

Questo snippet di codice definisce una pseudo proprietĂ  current di un oggetto che, una volta che vi si assegna un valore, aggiornerĂ  log con quel valore:

var o = {
  set current (str) {
    this.log[this.log.length] = str;
  },
  log: []
}

Nota che  current non è definito ed ogni tentativo di accedervi risulterĂ  in un undefined.

Rimuovere un setter con l'operatore delete

Se vuoi rimuovere il setter usato sopra, puoi semplicemente usare delete:

delete o.current;

Definire un setter su oggetti pre-esistenti usando defineProperty

Per aggiungere un setter ad un oggetto pre-esistente, usaObject.defineProperty().

var o = { a:0 };

Object.defineProperty(o, "b", { set: function (x) { this.a = x / 2; } });

o.b = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property
console.log(o.a) // 5

Usare il nome di una proprietĂ  computata

Nota: Le proprietĂ  computate sono una tecnologia sperimentale, parte dello standard proposto ECMAScript 6, e non sono ancora sufficientemente supportate dai browsers. L'uso di queste proprietĂ  in ambienti che non le supportano produrrĂ  un errore di sintassi.

var expr = "foo";

var obj = {
  baz: "bar",
  set [expr](v) { this.baz = v; }
};

console.log(obj.baz); // "bar"
obj.foo = "baz";      // run the setter
console.log(obj.baz); // "baz"

Specifiche

CompatibilitĂ  dei browsers

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
Caratteristica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Supporto base 1 2.0 (1.8.1) 9 9.5 3
Nomi di proprietĂ  computate No support 34 (34) No support No support No support
Caratteristica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Supporto base (Yes) (Yes) 1.0 (1.8.1) (Yes) (Yes) (Yes)
Nomi di proprietĂ  computate No support No support 34.0 (34.0) No support No support No support

Note specifiche per SpiderMonkey

  • A partire da JavaScript 1.8.1,  i setters non sono piĂš chiamati durante il setting delle properietĂ  negli inizializzatori di oggetti od array.
  • A partire da SpiderMonkey 38, un setter con rest parameter produce un SyntaxError come  da specifica ES6.

Guarda anche