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

标签 javascript eval

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

相关文章:

Bash 有条件地使用 sudo

javascript - 防止文本覆盖幻灯片图像

javascript - 如何将自定义 js 添加到所有管理模型中? Django

javascript - 隐藏其他 Accordion 项目

javascript - 在 try/catch 中评估 Rhino 中的错误

javascript - 转义 JavaScript 字符串中的单引号以进行 JavaScript 评估

python - 有没有办法为 Python 的 eval 保护字符串?

Javascript函数clearInterval不停止动画

javascript - 如何使用基于列索引的 javascript 对 html 表进行排序

python - DataFrame Python 中的数学求值字符串