handler.set()
Baseline
Ampliamente disponible
Esta característica está consolidada y funciona en muchos dispositivos y versiones de navegador. Está disponible en todos los navegadores desde septiembre de 2016.
El método handler.set() captura las asignaciones de un valor a una determinada propiedad.
Sintaxis
var p = new Proxy(target, {
set: function (target, property, value, receiver) {},
});
Parámetros
El método set recibe los siguientes parámetros. this se asocia al handler.
target-
El objeto objetivo.
property-
El nombre de la propiedad a la que se le asignará el valor.
value-
El nuevo valor asignado a la propiedad.
receiver-
El objeto al que originalmente iba dirigida la asignación. Normalmente es el proxy. Sin embargo el manejador o
sethandler puede ser llamado de forma indirecta a través de un prototipo entre otros.Por ejemplo, suponga que un escript ejecuta la sentencia
obj.name = "jen", yobjno es un proxy, y no posee la propiedad.name, pero tiene un proxy en su cadena de prototipos. El manejadorsetde este proxy será llamado y obj será pasado como el receiver.
Valor Devuelto
El método set debe devolver un valor booleano. Devolverá true para indicar que la asignación se ha llevado a cabo con éxito. Si devuelve false, y la asignación tiene lugar en modo estricto, se lanzará un error de tipo TypeError.
Descripción
El método handler.set captura la asignación de un valor a una propiedad.
Qué intercepta
Las siguientes operaciones son capturadas:
- Asignación a propiedades:
proxy[foo] = baryproxy.foo = bar - Asignación a propiedades heredadas:
Object.create(proxy)[foo] = bar Reflect.set()
Invariantes
Si los siguientes invariantes son violados, el proxy lanzará un TypeError:
- El valor de la propiedad no puede ser diferente al de la correspondiente propiedad del objeto, si esta es una propiedad no configurable, o sin permisos de escritura.
- No se puede asignar un valor a una propiedad si la correspondiente propiedad en el objeto objetivo es no configurable y tiene
undefinedcomo su atributo [[Set]]. - En modo estricto, la devolución de
falsepro parte del manejadorsetlanzará una excepción del tipoTypeError.
Ejemplos
El siguiente código captura la asignación de un valor a una propiedad.
var p = new Proxy(
{},
{
set: function (target, prop, value, receiver) {
target[prop] = value;
console.log("property set: " + prop + " = " + value);
return true;
},
},
);
console.log("a" in p); // false
p.a = 10; // "propiedad asignada: a = 10"
console.log("a" in p); // true
console.log(p.a); // 10
Especificaciones
| Especificación |
|---|
| ECMAScript® 2027 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver> |