JavaScript中所有事件处理程序注册的动态跟踪

JavaScript中所有事件处理程序注册的动态跟踪,javascript,phantomjs,prototypal-inheritance,Javascript,Phantomjs,Prototypal Inheritance,我的目标是动态跟踪JavaScript中事件处理程序的所有注册,包括但不限于文档和窗口对象。一段代码应该在网站其余部分执行(onLoad)之前运行,并且应该报告为事件注册的函数。我想包装addEventListener,onmouseclick,onmessage等等。但我不想对每个对象单独包装 我正在研究修改Object.constructor的行为,以便在构造函数中执行自检。代码应该非常简单,大致如下所示: var toWrap = [ "addEventListener", "onclic

我的目标是动态跟踪JavaScript中事件处理程序的所有注册,包括但不限于文档和窗口对象。一段代码应该在网站其余部分执行(onLoad)之前运行,并且应该报告为事件注册的函数。我想包装
addEventListener
onmouseclick
onmessage
等等。但我不想对每个对象单独包装

我正在研究修改
Object.constructor的行为,以便在构造函数中执行自检。代码应该非常简单,大致如下所示:

var toWrap = [ "addEventListener", "onclick", "..." ];

for ( var x in toWrap ) {
    if ( toWrap[x] in this ) {
        this[toWrap[x]] = wrap(toWrap[x], this[toWrap[x]]);
    }
}
。。。但是什么是插入代码的正确位置

与jQuery等相比,我更喜欢纯JavaScript解决方案,我用PhantomJS实现

更新:

在阅读之后,我想出了以下代码。它似乎很好用-有反对意见吗

Object = ( function ( ) {
    this.wrap = function(e) {
        // ....
    }   
    this.wrap();
});

Object.prototype.constructor===Object
很好,我也研究了Object.constructor,但是每次尝试都破坏了phantom中的所有JS执行,我不推荐这样做,但是如果您想覆盖处理程序分配的本机方法,您需要在元素的原型上执行,比如
Element.prototype
。尝试修改构造函数本身不会成功。此外,没有
onclick
方法。这是一个简单的属性。“但是我想知道你为什么要/需要这个。”愚蠢的利特尔我怎么才能抓住所有的处理者?原因:我想挑选一些特定的函数来对它们进行静态分析。