简体   繁体   English

当window.onclick()函数被覆盖时,我能找到吗?

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

in javascript, is it possible to make an event handler when a function attribute changes from 在javascript中,是否可以在函数属性发生变化时创建事件处理程序

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

to

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

This is a few years old, but it has worked great for me. 这已经有几年了,但对我来说效果很好。 An SO user posted an open-source object watcher a few years back. 几年前,SO用户发布了一个开源对象观察者。 It modifies the object prototype so that you watch for changes to specific properties of the object. 它会修改对象原型,以便您监视对象的特定属性的更改。

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

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

Source code: https://gist.github.com/eligrey/384583 (released with MIT license) 源代码: 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;
        }
    });
}

use a callback container for your custom function with addEventlistener or attachEvent 使用addEventlistenerattachEvent为您的自定义函数使用回调容器

element.attachEvent('onclick', handler);

or 要么

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

you can wrap it to some function 你可以把它包装成一些功能

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM