Javascript JS:一个接一个地调用函数而不触及原始函数?

Javascript JS:一个接一个地调用函数而不触及原始函数?,javascript,Javascript,我试图在特定页面上扩展第三方库,但我不想更改任何第三方代码。我知道第三方库在发生某些事情时调用的函数的名称,因此,如果我希望在此之后执行自己的自定义代码,我该怎么做 第三方图书馆: function eventFinished(args){ //library stuff here } 如果是我自己的代码,我会这样做: function eventFinished(args){ //library stuff here MyCustomFunction(); } va

我试图在特定页面上扩展第三方库,但我不想更改任何第三方代码。我知道第三方库在发生某些事情时调用的函数的名称,因此,如果我希望在此之后执行自己的自定义代码,我该怎么做

第三方图书馆:

function eventFinished(args){
    //library stuff here
}
如果是我自己的代码,我会这样做:

function eventFinished(args){
    //library stuff here
    MyCustomFunction();
}
var fnOriginalFunction = functionYouWantToExtend;
functionYouWantToExtend = function() {
    fnOriginalFunction.apply(this, arguments);

    // your code here
};
然而,事实并非如此,我不想覆盖库代码。那么,在不接触原始函数代码的情况下,是否仍然可以执行上述操作?我会引用函数本身,但仅此而已


编辑:我应该提到声明的函数是全局可用的。

如果有一种方法可以让您获得对要扩展的函数的引用,您可以像下面这样“monkey patch”它:

function eventFinished(args){
    //library stuff here
    MyCustomFunction();
}
var fnOriginalFunction = functionYouWantToExtend;
functionYouWantToExtend = function() {
    fnOriginalFunction.apply(this, arguments);

    // your code here
};
这将以某种无缝的方式有效地重新编写要扩展的函数

.

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

这是办不到的。您必须以某种方式修改代码以对其作出反应,除非代码提供事件发射机制或类似的机制

在不影响库的情况下实现这一点的方法是覆盖您想要扩展的函数,让它完成它已经完成的一切,并在上面添加您的自定义行为

例如:

const库={
方法(){
log(“我是库方法”);
}
}
常量不变方法=Library.method;
Library.method=函数(){
应用(这个,参数);
log(“我的自定义行为”);
}

Library.method()库调用的函数必须可能存在于无法覆盖它的上下文中。例如:如果它是在闭包中声明的,则不可能覆盖它。唯一可行的方法是,如果第三方库正在使用全局范围中定义的函数,这通常是不推荐的。