MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/a3e7b5301fea

Esta tradução está incompleta. Por favor, ajude a traduzir 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.
val
Um 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:

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 SyntaxError as per the ES6 specification.

See also

Etiquetas do documento e colaboradores

 Colaboradores desta página: willianbriotto
 Última atualização por: willianbriotto,