0

我需要覆盖(丰富)一个 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')将返回。

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

4

3 回答 3

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);

所有注射都存储在函数中

于 2012-08-21T06:03:25.973 回答
0

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

var orgFunction = window["functionName"];

所以getFunction看起来像

function getFunction (name) {\
     return window[name];
}
于 2012-07-03T13:46:10.083 回答
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");
于 2012-07-03T13:54:27.567 回答