JavaScript | método handler.defineProperty()

El método handler.defineProperty() en Javascript se usa para definir las nuevas propiedades y modificar las propiedades existentes directamente en un objeto. Es una trampa para Object.defineProper() .
Sintaxis: 
 

const p = new Proxy(target, {
  defineProperty: function(target, property, descriptor) {
  }
}); 

Parámetros: este método acepta tres parámetros, como se mencionó anteriormente y se describe a continuación: 
 

  • Destino: este parámetro contiene el objeto de destino.
  • propiedad: Este parámetro es el nombre o Símbolo de la propiedad cuya descripción se va a recuperar.
  • descriptor: este parámetro es el descriptor de la propiedad que se está definiendo o modificando.

Valor devuelto: este método devuelve un valor booleano que se utiliza para indicar si la propiedad se ha definido correctamente.
El siguiente ejemplo ilustra el método handler.defineProperty() en JavaScript:
Ejemplo 1: 
 

javascript

const p = new Proxy({}, {
  defineProperty: function(target, prop, descriptor) {
    console.log('Type : ' + prop);
    return true;
  }
});
 
const desc = { configurable: true, enumerable: true, value: 10 };
Object.defineProperty(p, 'String', desc);
 
var xyz = {}; 
var proxy = new Proxy(xyz, { 
  defineProperty: function(target, name, propertyDescriptor) { 
console.log('in defineProperty'); 
return Object.defineProperty(target, name, propertyDescriptor); 
  } 
}); 
Object.defineProperty(proxy, 'bar', {} ); 

Producción: 
 

"Type : String"
"in defineProperty"

Ejemplo 2: 
 

javascript

const handler1 = {
  defineProperty(target, key, descriptor) {
    invariant(key, 'define');
    return true;
  }
};
 
function invariant(key, action) {
  if (key[0] === '_') {
    throw new Error(
      `Invalid attempt to ${action} private "${key}" property`);
  }
}
 
const monster1 = {};
const proxy1 = new Proxy(monster1, handler1);
 
console.log(proxy1._propt = 'Handler defineProperty');

Producción: 
 

Error: Invalid attempt to define private "_propt" property

Navegadores compatibles: los navegadores compatibles con el método handler.defineProperty() se enumeran a continuación: 
 

  • Google Chrome 49 y superior
  • Firefox 18 y superior
  • Ópera 36 y superior
  • Safari 10 y superior
  • Borde 12 y superior

Publicación traducida automáticamente

Artículo escrito por SHUBHAMSINGH10 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 *