Javascript 代理Dom元素出现调用错误
我试图创建dom元素的代理,在本例中,我使用了window对象。当我运行代码时,我得到一个:Javascript 代理Dom元素出现调用错误,javascript,dom,proxy,Javascript,Dom,Proxy,我试图创建dom元素的代理,在本例中,我使用了window对象。当我运行代码时,我得到一个: Uncaught TypeError: Illegal invocation 但是,如果我修改:返回Reflect.apply(方法、this、参数) 使用:返回Reflect.apply(方法、目标、参数) 一切正常。如果我用自定义对象(如alice)创建代理,两个版本都可以正常工作 是否有方法使用返回Reflect.apply(方法、this、参数)创建dom对象的代理时?为什么它不起作用 <
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?当您使用自制对象运行同一个示例时,它清楚地保留了引用。问题是浏览器不喜欢我切换上下文,因为对代理的调用有一个窗口上下文,一旦它离开代理,上下文就改变了?