用于覆盖HTMLElement事件处理程序的Object.defineProperty不适用于事件属性

时间:2016-11-29 18:10:35

标签: javascript dom eventhandler

我想用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。 我无法弄清楚为什么?

0 个答案:

没有答案