问题 javascript和/或jQuery中的函数监听器


想知道是否有一种优雅的方式来监听javascript和/或jQuery中的函数。

而不是倾听 $('#mything').click(function(){ //blah }) 我想听一下特定功能何时被触发。我不想编辑函数,因为它在我不想直接破解的库中。

我确实发现了这个: http://plugins.jquery.com/project/jqConnect 连接功能。

但想知道更好的技术。


12014
2017-11-09 23:58


起源



答案:


执行此操作的唯一方法是覆盖该函数(即,破解库):

(function() {
    var oldVersion = someLibrary.someFunction;
    someLibrary.someFunction = function() {
        // do some stuff
        var result = oldVersion.apply(this, arguments);
        // do some more stuff
        return result;
    };
})();

编辑: 要在库函数运行后运行代码,只需先调用库函数,将结果存储在变量中。然后,运行您的代码,最后返回先前存储的结果。我已经更新了上面的示例,以便在库函数之前或之后容纳运行代码。


11
2017-11-10 00:04



如果返回值很重要,您可能应该返回调用oldVersion的值。 - jfriend00
好决定!完成。 - gilly3
优秀。谢谢 - doublejosh
这很可爱,并且完全无需破解库...但是这意味着事件必须在库函数运行之前发生。我想要它运行然后应用我的检查和更改。 - doublejosh
@JodyHeavener - 总的来说,是的,逻辑仍然适用。而且,不,我不希望它会对性能产生影响。 - gilly3


答案:


执行此操作的唯一方法是覆盖该函数(即,破解库):

(function() {
    var oldVersion = someLibrary.someFunction;
    someLibrary.someFunction = function() {
        // do some stuff
        var result = oldVersion.apply(this, arguments);
        // do some more stuff
        return result;
    };
})();

编辑: 要在库函数运行后运行代码,只需先调用库函数,将结果存储在变量中。然后,运行您的代码,最后返回先前存储的结果。我已经更新了上面的示例,以便在库函数之前或之后容纳运行代码。


11
2017-11-10 00:04



如果返回值很重要,您可能应该返回调用oldVersion的值。 - jfriend00
好决定!完成。 - gilly3
优秀。谢谢 - doublejosh
这很可爱,并且完全无需破解库...但是这意味着事件必须在库函数运行之前发生。我想要它运行然后应用我的检查和更改。 - doublejosh
@JodyHeavener - 总的来说,是的,逻辑仍然适用。而且,不,我不希望它会对性能产生影响。 - gilly3