handler.set()
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
Especificación | Estado | Comentario |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La definición de '[[Set]]' en esta especificación. |
Standard | Definición inicial. |
ECMAScript (ECMA-262) La definición de '[[Set]]' en esta especificación. |
Living Standard |
Compatibilidad con los buscadores
BCD tables only load in the browser