Javascript委托问题

时间:2011-03-26 23:10:28

标签: javascript lambda delegates anonymous-function

到目前为止,我还没有能够为Javascript找到任何委托函数教程。更不用说有参数的那些。

希望我当前的问题能够提供一个很好的例子。 (XXXX()是我传递给费()的函数

我现在拥有它的方式,我的“委托”,(XXXX())在调用Fee()后立即执行,而不是在我希望它被调用时(在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);
}

评论

2 个答案:

答案 0 :(得分:4)

你想:

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

它通常在Javascript中不被称为“委托”。我认为这是一个主要用于微软世界的术语。我们只称它为lambda或匿名函数。

主(Fee)函数中也有一个错误。改变这一行:

func(); //delegate is called here

答案 1 :(得分:2)

如果您的函数被调用XXX,那么如果您使用以下语法:XXX(),则调用您的函数。要将其作为代理传递,您只需传入XXX

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

Fee方法将负责调用它并确定将哪些参数传递给方法。