我需要覆盖(丰富)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')
。
当我们知道它的名字或者我们只有一个函数对象时,如何覆盖原始函数?
答案 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");