Método JavaScript Object.prototype.__defineSetter__()

El   método __defineSetter__() se utiliza para vincular la propiedad de un objeto a una función que se llamará cuando se intente establecer la propiedad especificada. Se recomienda usar la sintaxis del inicializador de objetos o la API Object.defineProperty() en lugar de este método, ya que está en desuso.

Sintaxis: 

obj.__defineSetter__( prop, fun )

Parámetros: esta función acepta dos parámetros, como se indicó anteriormente y se describe a continuación:

  • prop: Es una string que contiene el nombre de la propiedad para vincular a la función dada.
  • diversión: es una función que se llamará cuando se intente establecer la propiedad especificada. El parámetro val de la función se puede usar para especificar un alias para la variable que contiene el valor que se intentó asignar a prop .

Valores devueltos: este método devuelve indefinido.

Los siguientes ejemplos ilustran el uso del método __defineSetter__():

Ejemplo 1: Usar el método __defineSetter__()

Javascript

let tmpObj = {};
tmpObj.__defineSetter__('setValue', function(val) {
    this.currentValue = val;
});
 
obj.setValue = 10;
console.log(tmpObj.setValue);
console.log(tmpObj.currentValue);

Producción:

undefined
10

Ejemplo 2: uso de la forma compatible con el estándar utilizando la sintaxis del inicializador de objetos y la API Object.defineProperty()

Javascript

// Using the set operator
var obj1 = {
    set setValue(val) { this.currentValue = val; }
};
 
obj1.setValue = 10;
console.log(obj1.setValue);
console.log(obj1.currentValue);
 
// Using Object.defineProperty
var obj2 = {};
Object.defineProperty(obj2, 'value', {
  set: function(val) {
    this.currentValue = val;
  }
});
obj2.value = 2;
console.log(obj2.value);
console.log(obj2.currentValue);

Producción: 

undefined
10
undefined
2

Publicación traducida automáticamente

Artículo escrito por thacker_shahid y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *