我可以找到何时窗口.onclick()函数被覆盖

can I find when window.onclick() function overridden?

本文关键字:函数 覆盖 onclick 何时 窗口 我可以      更新时间:2023-09-26

在javascript中,当一个函数属性从

发生变化时,是否可以创建一个事件处理程序?
window.onclick = function() {  ....function 1...... };

window.onclick = function() {  ....function 2..... };

这是几年前,但它已经为我的伟大。几年前,一个SO用户发布了一个开源对象监视器。它修改对象原型,以便您监视对象的特定属性的更改。

window.watch('onclick', function() { console.log('changed'); });
window.onclick = function() {  console.log('click1'); };
window.onclick = function() {  console.log('click2'); };

JSFiddle: https://jsfiddle.net/gou48xpa/

源代码:https://gist.github.com/eligrey/384583(以MIT许可发布)

if (!Object.prototype.watch) {
    Object.defineProperty(Object.prototype, "watch", {
          enumerable: false
        , configurable: true
        , writable: false
        , value: function (prop, handler) {
            var
              oldval = this[prop]
            , newval = oldval
            , getter = function () {
                return newval;
            }
            , setter = function (val) {
                oldval = newval;
                return newval = handler.call(this, prop, oldval, val);
            }
            ;
            if (delete this[prop]) { // can't watch constants
                Object.defineProperty(this, prop, {
                      get: getter
                    , set: setter
                    , enumerable: true
                    , configurable: true
                });
            }
        }
    });
}
// object.unwatch
if (!Object.prototype.unwatch) {
    Object.defineProperty(Object.prototype, "unwatch", {
          enumerable: false
        , configurable: true
        , writable: false
        , value: function (prop) {
            var val = this[prop];
            delete this[prop]; // remove accessors
            this[prop] = val;
        }
    });
}

addEventlistenerattachEvent的自定义函数使用回调容器

element.attachEvent('onclick', handler);

element.addEventlistener('onclick', handler, false)

你可以把它包装成某个函数