Proxy Dom元素给出了调用错误

时间:2016-08-01 19:35:12

标签: javascript dom proxy

我正在尝试创建一个dom元素的代理,在这个例子中我使用了window对象。当我运行代码时,我得到了一个:

Uncaught TypeError: Illegal invocation

但是,如果我修改:return Reflect.apply(method, this, arguments); 用:return Reflect.apply(method, target, arguments); 一切正常。如果我从像alice这样的自定义对象创建代理,两个版本都可以正常工作。

在创建dom对象的代理时,有没有办法使用return Reflect.apply(method, this, arguments);?为什么不起作用?

<html>
<head>

</head>
    <body>
hello
<script>

var alice = {
    firstname:'Alice',
    lastname:'Smith',
    secret:'secret',
    amount: 0,
    removeAmount : function(amount){
        this.amount = this.amount - amount;
    },

};


var handler = {

    get: function(target, name, receiver){
        console.log("get: "+ name);
        var method = Reflect.get(target, name, receiver);
        if (typeof method === "function"){
            return function () {
                return Reflect.apply(method, this, arguments);
            } 
        }
        return method;
    },
    set: function(target, name, value, receiver){
        console.log("set: "+ name);
        return Reflect.set(target, name, value, receiver);
    }

};


var p =  new Proxy(window,handler);
p.alert("http://www.w3schools.com");


</script>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

在这种情况下,您希望通过window.alert实例(另一个上下文)调用Proxy(窗口上下文),因此您应将window显式设置为上下文作为第二个参数{ {1}}。因为在此代码执行时,Reflect.Apply(method, window, arguments)不再引用this