我正在尝试在特定页面上扩展第三方库,但我不想更改任何第三方代码。我知道第三方库在发生事件时调用的函数的名称,所以如果我希望自己的自定义代码在那之后执行,我该怎么办呢?
第三方图书馆有:
function eventFinished(args){
//library stuff here
}
现在,如果是我自己的代码,我会做这样的事情:
function eventFinished(args){
//library stuff here
MyCustomFunction();
}
但是,它不是,我不想覆盖库存库代码。那么无论如何都要做到这一点,但没有触及原始的功能代码?我会参考函数本身,但那就是它。
编辑:我应该提到声明的功能在全球范围内可用。
答案 0 :(得分:20)
如果你有办法获得你想扩展的功能的引用,你可以像这样“猴子补丁”:
var fnOriginalFunction = functionYouWantToExtend;
functionYouWantToExtend = function() {
fnOriginalFunction.apply(this, arguments);
// your code here
};
这有效地重新编写了您想要以无缝方式扩展的功能。
答案 1 :(得分:7)
"我正在尝试在特定页面上扩展第三方库,但我不想更改任何第三方代码"
这无法完成。除非代码提供事件发送机制或类似的东西,否则你必须以某种方式改变代码以对其作出反应。
在不影响库的情况下处理此问题的方法是覆盖要扩展的函数,方法是让它执行已经执行的所有操作,并在顶部添加自定义行为。
例如:
select id from TABLE2; //returns (100,101,102,103).