2013-05-17 79 views
0

總之,我想覆蓋一個新的函數,但在新功能,我希望能夠調用舊的。因此,例如:調用兩個具有相同名稱的函數

function test() 
{ 
    alert('original'); 
} 

// then some time later 
function test() 
{ 
    alert('new function'); 
} 

// call function 
test(); 

在這種情況下,只有最後test()被調用。因此new function被警告。

但是,有沒有辦法調用第一個test()方法?這兩個test()函數被調用?


我需要這個的原因是因爲一個web應用程序生成一個onSave()方法。當通過Ajax保存表單時,該功能被觸發。

我想在表單保存時做一些額外的事情,但我不能只是改變原來的onSave()函數。這就是爲什麼我正在尋找一種方法來擴展它。

我該怎麼做?

+0

的兩個功能好像你正在尋找'.done()' jQuery的。但不知道。 –

+3

在新功能中移動您需要在兩個版本之間共享的代碼,並從舊版本和新版本中調用它。稍後嘗試理解代碼時,您會避免頭痛。 –

+0

@Mr_Green你的意思是延期? http://api.jquery.com/category/deferred-object/ – EaterOfCode

回答

2
function test() 
{ 
    console.log('original'); 
} 


var test = function (oldFn) { 
    // /\ 
    // ------- 
    //  \/ 
    return function() { // <- return a new function which will get stored in `test` 
    oldFn();      // use the passed `oldFn` 
    console.log('new function'); // the new code 
    }; 
}(test); // <- pass in the old function, we do this, to avoid reference problems 

// call function 
test(); 
+0

感謝這似乎正在做我想要的。但我不太瞭解代碼。爲什麼新的'test'函數需要'return'? – w00

+0

@ w00我會盡快添加一些代碼註釋。 – Yoshi

+0

@ w00評論添加。雖然我不確定是否足夠,如果沒有,請告訴我。 ;) – Yoshi

0

你爲什麼不創建一個新的function並把function test()這樣當function test()被稱爲那麼new function被稱爲太裏面..

例如下面,而不是把同名函數

$(document).ajaxComplete(function() { 
    // do your work 
}); 

function test(){ 
//code 
your_new_function(); 
} 

function your_new_function(){ 
//code 
} 
0

使用不能創建同名

相關問題