2011-03-26 90 views
1

到目前爲止,我還沒有能夠在Javascript中使用任何Delegate函數教程。更不用說那些帶參數的。Javascript委託問題

希望我目前的問題會提供一個很好的例子。 (XXXX()是我傳遞給Fee()的函數)

我現在的方式是,我的「委託」(XXXX())在Fee()被調用後立即執行,而不是在我想要時它被稱爲(內費某處())

一行代碼,調用函數:

Fee(prod, item, "usage", i, y, XXXX(prod, y)); 

功能:

function Fee(prod, item, name, i, y, func) { 

    var open = false; 
    var prefix = "#" + prod + name; 

    $(prefix + y).click(function() { 
     var feeBoxName = prefix + "FeeBox" + y; 

     if (open == false) { 

      FeeOpen(prefix, y); 

      func; //delegate is called here 

      AddFeeButton(feeBoxName, "addFeeBtn2"); 
      open = true; 
     } else { 

      FeeClosed(prefix, y); 
      open = false; 
     } 
    }); 
} 

委託功能:

function XXXX(prod, y) { 
    var deducedFeeBoxName = "#" + prod + "usageFeeBox" + y; 
    alert(deducedFeeBoxName); //at present, this is called immediately when Fee is executed 

    UsageFeeBoxHeader(deducedFeeBoxName); 
    UsageFeeBoxData(deducedFeeBoxName, prod, y); 
} 

評論?

+1

與布爾值比較時,使用嚴格比較('==='和'!==')。定期的比較可能會迫使你的布爾人數字 - 你當然不希望這樣。 (如果另一個操作數不是布爾值,則會發生強制。) – 2011-03-26 23:17:56

回答

4

你想:

Fee(prod, item, "usage", i, y, function() { XXXX(prod, y); }); 

它通常不叫在JavaScript中 「委託」。我相信這是一個主要用於世界微軟部分的術語。我們只是稱它爲lambda或匿名函數。

您在主(Fee)函數中也有一個錯誤。改變這一行:

func(); //delegate is called here 
+1

YES。這就是它!間接指責我是微軟開發人員的加分。 – KevinDeus 2011-03-26 23:40:42

2

如果你的函數被調用XXX,這時如果使用此語法:XXX(),要調用的函數。在將它作爲代表,就簡單地傳遞在XXX

Fee(prod, item, "usage", i, y, XXX); 

費方法將負責調用它和確定哪些參數傳遞到方法中。