--- 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 ---
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à.
{set prop(val) { . . . }} {set [expression](val) { . . . }}
prop
val
prop
.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
:
{ set x(v) { }, set x(v) { } }
e { x: ..., set x(v) { } }
non sono permessi )Un setter può essere eliminato usando l'operatore delete
.
Questo snippet di codice definisce una pseudo proprietà current
di un oggetto o
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
.
delete
Se vuoi rimuovere il setter usato sopra, puoi semplicemente usare delete
:
delete o.current;
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
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"
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')}} |
{{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}} |