JS:在不触及原始功能的情况下调用一个接一个的函数?

时间:2017-09-15 17:28:36

标签: javascript

我正在尝试在特定页面上扩展第三方库,但我不想更改任何第三方代码。我知道第三方库在发生事件时调用的函数的名称,所以如果我希望自己的自定义代码在那之后执行,我该怎么办呢?

第三方图书馆有:

function eventFinished(args){
    //library stuff here
}

现在,如果是我自己的代码,我会做这样的事情:

function eventFinished(args){
    //library stuff here
    MyCustomFunction();
}

但是,它不是,我不想覆盖库存库代码。那么无论如何都要做到这一点,但没有触及原始的功能代码?我会参考函数本身,但那就是它。

编辑:我应该提到声明的功能在全球范围内可用。

2 个答案:

答案 0 :(得分:20)

如果你有办法获得你想扩展的功能的引用,你可以像这样“猴子补丁”:

var fnOriginalFunction = functionYouWantToExtend;
functionYouWantToExtend = function() {
    fnOriginalFunction.apply(this, arguments);

    // your code here
};

这有效地重新编写了您想要以无缝方式扩展的功能。

More information about monkey-patching

答案 1 :(得分:7)

"我正在尝试在特定页面上扩展第三方库,但我不想更改任何第三方代码"

这无法完成。除非代码提供事件发送机制或类似的东西,否则你必须以某种方式改变代码以对其作出反应。

在不影响库的情况下处理此问题的方法是覆盖要扩展的函数,方法是让它执行已经执行的所有操作,并在顶部添加自定义行为。

例如:



    select id from TABLE2;        //returns (100,101,102,103).