是否可以从其自己的处理程序对象中引用代理?

Is it possible to reference a Proxy from its own handler object?

我需要从其自己的处理程序中引用当前 Proxy 实例。我在阅读的任何文档中都没有看到这一点,我只是好奇是否有任何自然的方法可以做到这一点。

问题是,在处理程序对象内部,this 自然是指处理程序,而不是 Proxy 它是处理程序 of.

例如:

var ProxyHandler = {
    get: function(object, property) {
        var thisProxy = ??? // how to reference myProxy from here?
    }
};

var someObj = {foo: "bar"};
var myProxy = new Proxy(someObj, ProxyHandler);

console.log(myProxy.foo);

代理 get 处理程序的签名是

function(target, property, receiver) {

因此,由于您执行了 myProxy.foo,因此 receiver 参数将 myProxy 遵循 属性 访问上下文的标准逻辑。

处理程序的默认行为如下

let handler = {
    get(target, propKey, receiver) {
        return (...args) => console.log(args);
    }
};
let proxy = new Proxy({}, handler);

接收者是 Proxy 类型,在我们的例子中是对象 myProxy