如何将参数传递给静态回调函数?
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]);
我有密码
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]);