如何将参数传递给静态回调函数?

How to pass params to static callback function?

我有密码

MergeTool.as:

private static function askFromUser(cardId:uint, field:String, mainValue:*, addValue:*):void {

    WindowManager.instance.showQuestionPopup({
        message: "Client " + cardId + " has duplicate values. Do you want to replace" + mainValue + " to " + addValue,
        id:cardId,
        field:field,
        value:addValue
    }, okCallback);
}

private static function okCallback(p:*):void {
    trace("ok", p.message);
}

QuestionPopup.as :

private function onClick(event:MouseEvent):void {
    if(_ok) _ok.call(params);
}

当我按下 "Yes" 时,它会报错:

错误 #1063:core::MergeTool$/okCallback() 上的参数计数不匹配。预期 1,得到 0.

但是,如果我使用带有 0 个参数的匿名回调 - 它可以正常工作:

        WindowManager.instance.showQuestionPopup({
        message: "Client " + cardId + " has duplicate values. Do you want to replace" + mainValue + " to " + addValue,
        id:cardId,
        field:field,
        value:addValue
    }, function (){
        trace("ok", this.message);
    });

它 returns params 对象,我传递给 WindowManager.instance.showQuestionPopup(params, callback) 我可以在匿名函数中使用 "this" 访问它。

我认为 1 个变体因为静态而不起作用。如何修复 1 个变体,因为 2 不直观?

function.call()方法不传参,参数是告诉this应该引用什么对象。

相反,您应该使用 function.apply(context, parameter array) 方法。它采用与 call 方法相同的第一个参数,但第二个参数采用 Array 并将数组的每个元素作为参数应用于您要调用的函数。所以对你来说,它应该是这样的:

private function onClick(event:MouseEvent):void {
    if(_ok != null) _ok.apply(this, [params]);
}

为了说明,假设您有以下需要 3 个参数的函数:

function test(p1:Number, p2Number, p3:Number){

}

下面两行完全一样:

test(1,2,3);

test.apply(this, [1,2,3]);