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® 2025 Language Specification
# sec-object.prototype.__defineSetter__

Compatibilidade com navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
__defineSetter__
Deprecated

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Deprecated. Not for use in new websites.
See implementation notes.

Veja também