MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Questa traduzione è incompleta. Collabora alla traduzione di questo articolo dall’originale in lingua inglese.

Il costrutto sintattico set collega una proprietà di un oggetto ad una funzione che viene chiamata quando si ha un tentavo di modifica 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

Specifica Status Commento
ECMAScript 5.1 (ECMA-262)
The definition of 'Object Initializer' in that specification.
Standard Definizione iniziale.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Method definitions' in that specification.
Standard Aggiunti i nomi di proprietà computate.
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Method definitions' in that specification.
Draft  

Compatibilità dei browsers

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

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: DeadManPoe
 Ultima modifica di: DeadManPoe,