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