2012-07-09 63 views
1

如果我有這樣的功能:可以將附加功能綁定到某個功能嗎?

function showAlert() { 
    alert("1"); 
} 

有沒有在頁面的不同部分結合的額外功能,相同功能的方法嗎?

像這樣:

function showAlert() { 
    alert("1"); 
    alert("2"); 
} 
+0

可能重複:http://stackoverflow.com/questions/296667/overriding-a-javascript-function-while-referencing-the-original – Adi 2012-07-09 12:30:11

+0

你爲什麼要這麼做?這會使代碼無法閱讀! – 2012-07-09 12:30:14

+0

相同功能的附加功能,例如「關閉模式」功能。而不是綁定到調用該函數的相同元素。 – 2012-07-09 12:31:33

回答

4

您可以調用舊功能的新功能覆蓋功能。

function showAlert() { 
    alert("1"); 
} 

showAlert = (function (original){ 
return function() { 
    original(); 
    alert("2"); 
} 
}(showAlert)); 

showAlert(); 

​ 
+0

...並且您甚至不必爲第一個版本使用'var showAlert = function()',對。 ) 好一個。 – raina77ow 2012-07-09 12:36:18

0

那麼,可以簡單地重新定義函數:

function showAlert() { 
    alert("1"); 
} 

var originalShowAlert = showAlert; 

showAlert = function(){ 
    originalShowAlert(); 
    alert("2"); 
} 

showAlert(); 
0

由於功能被簡單地視爲JS對象,可以保持的功能的陣列,則在循環中執行各功能。這允許您添加任何類型的功能到你想要的集合(甚至在保留索引時將它們移除),而不會中斷執行列表。

var funk = []; 

funk.push(function showAlert1() 
{ 
    alert("1"); 
}); 

funk.push(function showAlert2() 
{ 

    alert("2"); 
}); 


funk.push(function showAlertFromMsg() 
{ 
    alert("You passed " + this); 

}); 


for(var i=0,len=funk.length; i<len; i++) funk[i].call("This is my message");