handler.set()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 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
set
handler 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"
, yobj
no es un proxy, y no posee la propiedad.name
, pero tiene un proxy en su cadena de prototipos. El manejadorset
de 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] = bar
yproxy.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
undefined
como su atributo [[Set]]. - En modo estricto, la devolución de
false
pro parte del manejadorset
lanzará 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
Specification |
---|
ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver |
Compatibilidad con navegadores
BCD tables only load in the browser