The handler.set()
method is a trap for setting a property value.
var p = new Proxy(target, { set: function(target, property, value, receiver) { } });
The following parameters are passed to the set
method. this
is bound to the handler.
target
property
Symbol
of the property to set. value
receiver
set
handler can also be called indirectly, via the prototype chain or various other ways.obj.name = "jen"
, and obj
is not a proxy, and has no own property .name
, but it has a proxy on its prototype chain. That proxy's set
handler will be called, and obj
will be passed as the receiver.The set
method should return a boolean value. Return true
to indicate that assignment succeeded. If the set
method returns false
, and the assignment happened in strict-mode code, a TypeError
will be thrown.
The handler.set
method is a trap for setting property value.
This trap can intercept these operations:
proxy[foo] = bar
and proxy.foo = bar
Object.create(proxy)[foo] = bar
Reflect.set()
If the following invariants are violated, the proxy will throw a TypeError
:
undefined
as its [[Set]] attribute.false
return value from the set
handler will throw a TypeError
exception.The following code traps setting a property value.
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; // "property set: a = 10" console.log('a' in p); // true console.log(p.a); // 10
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of '[[Set]]' in that specification. | Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262) The definition of '[[Set]]' in that specification. | Draft |
Desktop | ||||||
---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
Basic support | 49 | 12 | 18 | No | 36 | 10 |
Mobile | |||||||
---|---|---|---|---|---|---|---|
Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
Basic support | 49 | 49 | Yes | 18 | 36 | 10 | 5.0 |
Server | |
---|---|
Node.js | |
Basic support | 6.0.0 |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set