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
jsfunction(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
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
// 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