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')代码>
单击