gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:47:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com