--- title: setter slug: Web/JavaScript/Reference/Functions/set translation_of: Web/JavaScript/Reference/Functions/set ---
A sintaxe set
liga a propriedade da função para ser chamada quando existe uma tentativa de definir valor para essa propriedade.
{set prop(val) { . . . }} {set [expression](val) { . . . }}
prop
val
Um apelido para variável que será atribuidada a prop.
Em JavaScript, um setter pode ser usado para executar uma função sempre que se tenta mudar uma propriedade específica. Setters são geralmente usados em conjunto com getters, para criar um tipo de pseudo-propriedade. No entanto é impossível ter-se um setter para uma propriedade que contenha um valor real.
Observe os seguintes itens ao trabalhar com a sintaxe set:
{ set x(v) { }, set x(v) { } }
e { x: ..., set x(v) { } }
é proibido.)Um setter pode ser deletado usando o operator delete
.
Vai definir um pseudo-property current para este objeto, quando atribuido um valor, vai mudar log
com o valor passado:
var o = { set current (str) { this.log[this.log.length] = str; }, log: [] }
Observer que current não está definido e qualquer tentativa de acesso irá resultar em undefined.
delete
Se você deseja remover o setter, poderá usar somente o delete
:
delete o.current;
defineProperty
Para adicionar um setter para um Object existentem mais tarde, use {{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
Atenção: Propriedades computadas são uma tecnologia experimental, parte da proposta ECMAScript 6, e não é amplamente suportada por todos os browsers ainda. Ele vai retornar um syntax error en ambientes que não tem suporte.
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"
Specification | Status | Comment |
---|---|---|
{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}} | {{Spec2('ES5.1')}} | Initial definition. |
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ES6')}} | Added computed property names. |
{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatChrome(1)}} | {{ CompatGeckoDesktop("1.8.1") }} | {{ CompatIE(9) }} | 9.5 | 3 |
Computed property names | {{CompatNo}} | {{ CompatGeckoDesktop("34") }} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{ CompatGeckoMobile("1.8.1") }} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Computed property names | {{CompatNo}} | {{CompatNo}} | {{ CompatGeckoMobile("34.0") }} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |