为什么从代理构造函数构造的实例不调用代理陷阱?

问题描述 投票:0回答:1

我正在尝试使用以下代码通过代理注册功能更改:

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:请不要剧透如何完成这个挑战,我只想知道如何完成这一部分。或者建议另一种方法来完成这项工作。

谢谢!

javascript es6-proxy
1个回答
1
投票

注意

handler.construct()
只是

return new objTarget(...args)

返回值没有什么特别的,它只是代理目标的一个实例

wand
所以类似

return new Proxy(new objTarget(...args), someHandler)

将允许您根据

w
中定义的陷阱拦截
someHandler
上的操作。

© www.soinside.com 2019 - 2024. All rights reserved.