2012-07-03 64 views
0

我需要覆蓋(豐富)Javascript函數。問題是自動生成功能:使用生成名稱的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); 

所有注射都存儲在功能

+0

thx爲答案,最後我的解決方案是類似的 – ijavid

0

如果您知道該函數並且它在全局範圍內,則可以使用括號表示法引用它。

var orgFunction = window["functionName"]; 

所以getFunction看起來像

function getFunction (name) {\ 
    return window[name]; 
} 
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"); 
相關問題