了解 ES6 javascript 代理
Understanding ES6 javascript proxies
我正在尝试使用以下代码通过代理注册功能更改:
const handler = {
construct(objTarget, args, oldConstructor) {
return new objTarget(...args)
},
set(target, key, value) {
console.log(`Setting value ${key} as ${value}`)
target[key] = value;
},
get(target, key) {
console.log(`Reading value from ${key}`)
return target[key];
},
};
function wand (args){console.log(args)}
const Wand = new Proxy(wand, handler);
var w = new Wand(["some","args"]);
当我输入
Wand.a = 10
我得到输出
>Setting value a as 10
但是如果我输入
w.a = 10
处理程序"get"不输出任何内容
如何让代码为 "w.a = 10" 工作?这是 codewars.com 挑战的一部分,所以
var w = new Wand(["some","args"]);
已预定义,无法修改。
PS: 请不要破坏如何完成这个挑战,我只想知道如何完成这部分。或者建议另一种方法来完成这项工作。
谢谢!
注意 handler.construct()
就是
return new objTarget(...args)
返回的值没有什么特别的,它只是代理目标的一个实例wand
所以类似于
return new Proxy(new objTarget(...args), someHandler)
将允许您根据 someHandler
中定义的陷阱拦截对 w
的操作。
我正在尝试使用以下代码通过代理注册功能更改:
const handler = {
construct(objTarget, args, oldConstructor) {
return new objTarget(...args)
},
set(target, key, value) {
console.log(`Setting value ${key} as ${value}`)
target[key] = value;
},
get(target, key) {
console.log(`Reading value from ${key}`)
return target[key];
},
};
function wand (args){console.log(args)}
const Wand = new Proxy(wand, handler);
var w = new Wand(["some","args"]);
当我输入
Wand.a = 10
我得到输出
>Setting value a as 10
但是如果我输入
w.a = 10
处理程序"get"不输出任何内容
如何让代码为 "w.a = 10" 工作?这是 codewars.com 挑战的一部分,所以
var w = new Wand(["some","args"]);
已预定义,无法修改。
PS: 请不要破坏如何完成这个挑战,我只想知道如何完成这部分。或者建议另一种方法来完成这项工作。
谢谢!
注意 handler.construct()
就是
return new objTarget(...args)
返回的值没有什么特别的,它只是代理目标的一个实例wand
所以类似于
return new Proxy(new objTarget(...args), someHandler)
将允许您根据 someHandler
中定义的陷阱拦截对 w
的操作。