每当函数 foo() 触发时,我需要触发函数 bar() 。我无法控制函数 foo 或它将来是否会改变。我经常遇到这种情况(而且我讨厌它)。
我编写此函数是为了将代码添加到函数 foo 的末尾:
function appendToFunction(fn,code){
if(typeof fn == 'function'){
var fnCode = fn.toString() ;
fnCode = fnCode.replace(/\}$/,code+"\n}") ;
window.eval(fnCode); // Global scope
return true ;
}
else{
return false ;
}
}
例如:
appendToFunction(foo,"bar();");
这对我来说是一个糟糕的想法 - 但它确实有效。有人可以给我指出一个更好(更安全)的方向吗?
编辑:foo
不是一个特定的函数,而是我最终处理的许多函数。它们不会在页面中动态更改。但它们可能会不时更改(例如表单验证要求)。
解决方案: 我决定采用亚当答案的修改版本。它并不完美,但比我拥有的要好:
var oldFoo = foo ;
foo = function(){
var result = oldFoo.apply(this, arguments);
bar();
return result ;
}
注意。请注意 IE6/7 中一些没有 .apply()
方法的 native 函数。
最佳答案
您只需使用调用原始函数的自定义函数来覆盖 foo
即可。
例如
var old_foo = foo;
foo = function() {
old_foo();
bar();
}
您还应该通过替换函数将 foo
传入的任何参数传递给它。
关于javascript - 将代码附加到现有函数的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222618/