每当函数 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 ;
}
}
eg:
appendToFunction(foo,"bar();");
我觉得这是一个糟糕的主意——但它确实有效。有人可以给我指出一个更好(更安全)的方向吗?
EDIT: foo
不是一个特定的函数,而是我最终处理的许多函数。它们不会在页面中动态更改。但它们可能会不时更改(例如表单验证要求)。
Solution:
我决定采用亚当答案的修改版本。它并不完美,但比我所拥有的要好:
var oldFoo = foo ;
foo = function(){
var result = oldFoo.apply(this, arguments);
bar();
return result ;
}
注意。请注意 IE6/7 中的一些本机函数,它们没有.apply()
method.