2011-03-26 74 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); 

费方法将负责调用它和确定哪些参数传递到方法中。