将代码附加到现有函数的末尾

2024-01-17

每当函数 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.


你可以覆盖foo使用调用原始函数的自定义函数。

E.g.

var old_foo = foo;
foo = function() {
  old_foo();
  bar();
}

您还应该传递任何参数foo通过您的替换功能将其纳入其中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将代码附加到现有函数的末尾 的相关文章

随机推荐