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

时间:2017-09-01 21:43:04

标签: javascript ecmascript-6 es6-proxy

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

问题是,在处理程序对象中,this自然地指向处理程序,而不是Proxy它是的处理程序

例如:

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);

2 个答案:

答案 0 :(得分:2)

代理get处理程序的签名是

function(target, property, receiver) {

所以,既然你做了myProxy.foo,那么receiver参数将是myProxy,遵循属性访问上下文的标准逻辑。

答案 1 :(得分:1)

处理程序的默认行为如下

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

接收器属于Proxy类型,在我们的例子中,它是 myProxy

的对象