Esta tradução está incompleta. Ajude atraduzir este artigo.
A sintaxe set liga a propriedade da função para ser chamada quando existe uma tentativa de definir valor para essa propriedade.
Sintaxe
{set prop(val) { . . . }}
{set [expression](val) { . . . }}
Parâmetros
prop- Nome da propriedade ligada a função.
valUm apelido para variável que será atribuidada a prop.- expression
- Iniciando com ECMAScript 6, você pode usar também expressões para computar o nome da propriedade a ser definida na função.
Descrição
Em JavaScript, um setter pode ser usado para executar uma função sempre que uma propriedade específica é tetanda a mudar. Setters são mais frequentemente usados em conjunto com getters, para criar um tipo de pseudo-property. Não é possível ter simultaneamente um setter para uma property que contém um valor real.
Observer os seguintes itens ao trabalhar com a sintaxe set:
- Ele pode ter um identificador que é um número ou uma string;
- Deve ter exatamente um parâmetro (veja Incompatible ES5 change: literal getter and setter functions must now have exactly zero or one arguments para mais informações);
- Não deve ter a mesma nomenclatura seja ela para propriedades ou função.
({ set x(v) { }, set x(v) { } }and{ x: ..., set x(v) { } }are forbidden )
Um setter pode ser deletado usando o operator delete.
Exemplos
Definindo um setter em new Objects no inicializador
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.
Removendo um setter com o operador delete
Se você deseja remover o setter, poderá usar somente o delete:
delete o.current;
Definindo um setter para um Object existente usando o defineProperty
Para adicionar um setter para um Object existentem mais tarde, use 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
Usando um nome de propriedade computada
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"
Expecificações
| Specification | Status | Comment |
|---|---|---|
| ECMAScript 5.1 (ECMA-262) The definition of 'Object Initializer' in that specification. |
Standard | Initial definition. |
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Method definitions' in that specification. |
Standard | Added computed property names. |
| ECMAScript 2017 Draft (ECMA-262) The definition of 'Method definitions' in that specification. |
Draft |
Browser compatibility
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | 1 | 2.0 (1.8.1) | 9 | 9.5 | 3 |
| Computed property names | Não suportado | 34 (34) | Não suportado | Não suportado | Não suportado |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | (Yes) | (Yes) | 1.0 (1.8.1) | (Yes) | (Yes) | (Yes) |
| Computed property names | Não suportado | Não suportado | 34.0 (34.0) | Não suportado | Não suportado | Não suportado |
SpiderMonkey-specific notes
- Starting with JavaScript 1.8.1, setters are no longer called when setting properties in object and array initializers.
- From SpiderMonkey 38 on, a setter with a rest parameter is a
SyntaxErroras per the ES6 specification.
See also
- getter
deleteObject.defineProperty()__defineGetter____defineSetter__- Defining Getters and Setters in JavaScript Guide

