Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript onclick代理_Javascript_Proxy_Es6 Proxy - Fatal编程技术网

Javascript onclick代理

Javascript onclick代理,javascript,proxy,es6-proxy,Javascript,Proxy,Es6 Proxy,我想代理onclick事件 以下是我尝试过的: HTMLElement.prototype.onclick = new Proxy(HTMLElement.prototype.onclick, { set: (target, thisArgs, argsList) => { console.log(thisArgs) return target.apply(thisArgs, argsList) } } 使用apply:trap,我可以使用上面的代码代理getEl

我想代理
onclick
事件

以下是我尝试过的:

HTMLElement.prototype.onclick = new Proxy(HTMLElement.prototype.onclick, {
  set: (target, thisArgs, argsList) => {
    console.log(thisArgs)
    return target.apply(thisArgs, argsList)
  }
}

使用
apply:
trap,我可以使用上面的代码代理
getElementById
。但是当我尝试代理
onclick
时,我得到
非法调用
错误。如何修复代码?

HTMLElement.prototype.onclick
是一个getter/setter。当你提到

HTMLElement.prototype.onclick
调用getter时,调用上下文为
HTMLElement.prototype
——但getter需要实际元素的调用上下文,因此抛出

您可以使用
Object.defineProperty
来代替-而且似乎不需要代理,只需拦截调用:

const{get,set}=Object.getOwnPropertyDescriptor(HTMLElement.prototype,'onclick');
Object.defineProperty(HTMLElement.prototype,“onclick”{
set:函数(newHandler){
日志(newHandler)
return set.call(this,newHandler)
},
得到
});
document.body.onclick=()=>console.log('foo')
单击