--- title: setter slug: Web/JavaScript/Reference/Functions/set tags: - Funzioni - JavaScript - setter translation_of: Web/JavaScript/Reference/Functions/set original_slug: Web/JavaScript/Reference/Functions_and_function_scope/set ---
{{jsSidebar("Functions")}}

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, usa{{jsxref("Object.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
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}} {{Spec2('ES5.1')}} Definizione iniziale.
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}} {{Spec2('ES6')}} Aggiunti i nomi di proprietà computate.
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} {{Spec2('ESDraft')}}

Compatibilità dei browsers

{{CompatibilityTable}}

Caratteristica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Supporto base {{CompatChrome(1)}} {{ CompatGeckoDesktop("1.8.1") }} {{ CompatIE(9) }} 9.5 3
Nomi di proprietà computate {{CompatNo}} {{ CompatGeckoDesktop("34") }} {{CompatNo}} {{CompatNo}} {{CompatNo}}
Caratteristica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Supporto base {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{ CompatGeckoMobile("1.8.1") }} {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatVersionUnknown}}
Nomi di proprietà computate {{CompatNo}} {{CompatNo}} {{ CompatGeckoMobile("34.0") }} {{CompatNo}} {{CompatNo}} {{CompatNo}}

Note specifiche per SpiderMonkey

Guarda anche