我想用Object.defineProperty覆盖HTMLElement的事件处理程序方法。
这是代码。
var desc = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'onclick');
var originalGet = desc.get;
desc.get = function () {
console.log('get onclick');
return originalGet.apply(this, arguments);
}
var originalSet = desc.set;
desc.set = function() {
console.log('set onclick', arguments);
return originalSet.apply(this, arguments);
}
当我以这种方式添加事件监听器时,代码将起作用,
var btn = document.getElementById("btn");
btn.onclick = function() {
console.log("button clicked");
}
但是当我在html内联中定义onclick处理程序时,它将不起作用。
<button onclick="btnClick(event)">ok</button>
调用getter,但不调用setter。 我无法弄清楚为什么?