Es6 Proxy: Set() Trap Not Triggering, When Setting Inside Target Object's Method
Example: let foo = {bar: 'baz', method() { this.bar = 'baz2' }} let fooProxy = new Proxy(foo, {set(target, key, val) { console.log('set trap triggered!') }}) fooProxy.bar = 'any v
Solution 1:
The set trap is not triggered because the this that you are accessing within method() is not the proxy but the original object foo. A proxy does not change the original object. You can see this by checking what this is inside method():
let foo = {
method () {
returnthis === fooProxy
}
}
let fooProxy = newProxy(foo, {})
document.write(foo.method()) //=> falseYou could instead explicitly set the context of method() on invocation by using Function#call:
let foo = {bar: 'baz', method() { this.bar = 'baz2' }}
let fooProxy = newProxy(foo, {set(target, key, val) { console.log('set trap triggered!') }})
fooProxy.bar = 'any value'//=> set trap triggered!
foo.method.call(fooProxy) //=> set trap triggered!Solution 2:
You can also add the proxy to the object prototype.
SomeObject.prototype = newProxy(
SomeObject.prototype,
SomeObjectHandlerProxy
);
instance = newSomeObject();
something like should work
Solution 3:
In foo.method you're not setting a propery through the proxy object, so obviously no trap is triggered. A Proxy does not modify the original object.
Post a Comment for "Es6 Proxy: Set() Trap Not Triggering, When Setting Inside Target Object's Method"