Javascript覆盖生成名称的函数

时间:2012-07-03 13:43:15

标签: javascript jquery function

我需要覆盖(丰富)Javascript函数。问题是该功能是自动生成的:

var original_function = getFunction('someID'); // eval('someID');

我的代码将是这样的:

var f = function(arg) { 
 do_some_stuff(); 
 original_function(arg);  
 do_another_stuff(); 
} 

现在,当代码的其他部分调用getFunction('someID')时,将返回f('someID')

当我们知道它的名字或者我们只有一个函数对象时,如何覆盖原始函数?

3 个答案:

答案 0 :(得分:1)

function someFunc (arg) { alert(arg)}


function injectFunc(original, injection, inject_after) {
if(typeof original === "string") original = window[original];
return function() {
    if(!inject_after) injection.apply(this, arguments);
    var result = original.apply(this, arguments);
    if(inject_after) injection.apply(this, arguments);
    return result;
    }
}

// insert before
someFunc = injectFunc(someFunc, function(arg) {alert("Before" + arg)});

// or with string func name
someFunc = injectFunc('someFunc', function(arg) {alert("Before" + arg)});

// and after
someFunc = injectFunc(someFunc, function(arg) {alert("After" + arg)}, true);


// and with olny func name 
window['someFunc'] = injectFunc('someFunc', function(arg) {alert("After" + arg)}, true);

所有注射都存储在功能

答案 1 :(得分:0)

如果您知道该功能并且它在全局范围内,则可以使用括号表示法来引用它。

var orgFunction = window["functionName"];

所以getFunction看起来像

function getFunction (name) {\
     return window[name];
}

答案 2 :(得分:0)

存储它&替换它;

//original
function someId(arg) { alert(arg); }

//replace    
(function() {
    var original_function = window["someId"];
    window.someId = function(arg) { 
       alert("new");
       return original_function.apply(this, arguments);
    }
})();

//call     
someId("hello");