【问题标题】:Javascript Delegate issueJavascript 委托问题
【发布时间】:2025-11-24 06:40:01
【问题描述】:

到目前为止,我还没有找到任何适用于 Javascript 的 Delegate 函数教程。带参数的就更不用说了。

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

我现在的方式是,我的“委托”(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);
}

评论?

【问题讨论】:

  • 与布尔值比较时使用严格比较(===!==)。定期比较可能会将您的布尔值强制转换为数字 - 您当然不希望这样。 (如果另一个操作数不是布尔值,则会发生强制。)

标签: javascript lambda delegates anonymous-function


【解决方案1】:

你想要:

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

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

主 (Fee) 函数中也存在错误。更改此行:

func(); //delegate is called here

【讨论】:

  • 是的。就是这样!间接指责我是微软开发者的加分。
【解决方案2】:

如果你的函数被称为XXX,那么如果你使用这个语法:XXX(),你就是在调用你的函数。要将其作为委托传递,您只需传递XXX

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

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

【讨论】: