Object.prototype.__defineSetter__()

Aviso: Esta funcionalidade está depreciada em favor da definição de setters usando a sintaxe de inicialização de objeto ou a API Object.defineProperty().

Entretando, como ele é largamente implementado e usado na Web, é bem improvável que os navegadores vão parar de implementá-lo.

O método __defineSetter__ vincula uma propriedade de um objeto a uma função a ser chamada quando é feita uma tentativa de atribuir algo a aquela propriedade.

Sintaxe

obj.__defineSetter__(prop, fun)

Parâmetros

prop

Uma cadeia de caracteres (string) contendo o nome da propriedade que vai ser vinculada a função dada.

fun

A função a ser chamada quando houver uma tentativa de atribuir na propriedade especificada. Esta função toma a forma

js
function(val) { . . . }
val

Um apelido para a variável que contém o valor que se tentou atribuir a prop.

Valor de retorno

Descrição

O método __defineSetter__ permite um setter ser definido a um objeto pré-existente.

Exemplos

Não padronizados e forma depreciada

js
var o = {};
o.__defineSetter__("value", function (val) {
  this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Formas compatíveis padronizadas

js
// Usando o operador set
var o = {
  set value(val) {
    this.anotherValue = val;
  },
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

// Usando Object.defineProperty
var o = {};
Object.defineProperty(o, "value", {
  set: function (val) {
    this.anotherValue = val;
  },
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Especificações

Specification
ECMAScript Language Specification
# sec-object.prototype.__defineSetter__

Compatibilidade com navegadores

BCD tables only load in the browser

Veja também