Javascript 代理Dom元素出现调用错误

Javascript 代理Dom元素出现调用错误,javascript,dom,proxy,Javascript,Dom,Proxy,我试图创建dom元素的代理,在本例中,我使用了window对象。当我运行代码时,我得到一个: Uncaught TypeError: Illegal invocation 但是,如果我修改:返回Reflect.apply(方法、this、参数) 使用:返回Reflect.apply(方法、目标、参数) 一切正常。如果我用自定义对象(如alice)创建代理,两个版本都可以正常工作 是否有方法使用返回Reflect.apply(方法、this、参数)创建dom对象的代理时?为什么它不起作用 <

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

Uncaught TypeError: Illegal invocation
但是,如果我修改:
返回Reflect.apply(方法、this、参数)
使用:
返回Reflect.apply(方法、目标、参数)
一切正常。如果我用自定义对象(如alice)创建代理,两个版本都可以正常工作

是否有方法使用
返回Reflect.apply(方法、this、参数)创建dom对象的代理时?为什么它不起作用

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

你好
var alice={
名字:'爱丽丝',
姓氏:'Smith',
秘密:'秘密',
金额:0,
removeAmount:函数(数量){
this.amount=this.amount-金额;
},
};
变量处理程序={
get:函数(目标、名称、接收者){
log(“get:+name”);
var method=Reflect.get(目标、名称、接收者);
如果(方法类型==“函数”){
返回函数(){
返回Reflect.apply(方法、this、参数);
} 
}
返回法;
},
设置:功能(目标、名称、值、接收者){
console.log(“set:+name”);
返回Reflect.set(目标、名称、值、接收者);
}
};
var p=新代理(窗口、处理程序);
p、 警报(“http://www.w3schools.com");

在这种情况下,您希望通过
代理
实例(另一个上下文)调用
窗口.alert
(窗口上下文),因此您应该将
窗口
显式设置为上下文,作为第二个参数
Reflect.Apply(方法、窗口、参数)
。因为在代码执行的这一点上,
this
不再引用
window

我不明白为什么它不再引用window?当您使用自制对象运行同一个示例时,它清楚地保留了引用。问题是浏览器不喜欢我切换上下文,因为对代理的调用有一个窗口上下文,一旦它离开代理,上下文就改变了?