Object.prototype.__defineSetter__()

You’re reading the English version of this content since no translation exists yet for this locale. Help us translate this article!

Esta característica está en desuso en favor de definir los setters usando la sintaxis del inicializador de objetos o la API Object.defineProperty().

Sin embargo, ya que está implementado y utilizado ampliamente en la Web, es muy poco probable que los navegadores dejen de implementarlo.

El método __defineSetter__  enlaza la propiedad de un objeto a una función que se llamará cuando se intente definir esta propiedad.

Sintaxis

obj.__defineSetter__(prop, fun)

Parámetros

prop
Una cadena de caracteres que contiene el nombre de la propiedad que se enlazará a la función dada.
fun
Una función que se llamará cuando hay un intento de definir la propiedad especificada. Esta función toma la forma
function(val) { . . . }
val
Un alias para la variable que contiene el valor que se intentó asignar a prop.

Valor de retorno

undefined.

Descripción

El método __defineSetter__ permite definir un setter en un objeto preexistente.

Ejemplos

// Manera no estándar y obsoleta

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


// Formas que cumplen con los estándares

// Usando el 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

Especificaciones

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.prototype.__defineSetter__()' in that specification.
Draft Incluído en el anexo (normativo) para las características heredadas adicionales de ECMAScript para navegadores web (note que la especificación codifica lo que ya está en implementaciones).

Compatibilidad con los navegadores

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
__defineSetter__
Deprecated
Chrome Full support YesEdge Full support 12Firefox Full support 1
Notes
Full support 1
Notes
Notes Starting with Firefox 48, this method can no longer be called at the global scope without any object. A TypeError will be thrown otherwise. Previously, the global object was used in these cases automatically, but this is no longer the case.
IE Full support 11Opera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

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

Ver también