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