我有代码
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);
}
当我按“是”时,它会出错:
错误#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);
});
它返回params对象,我传递给WindowManager.instance.showQuestionPopup(params,callback),我可以在匿名fucntion中使用“this”访问它。
我认为1变种并不会因为静态而烦恼。如何修复1个变体,因为2不直观?
答案 0 :(得分:1)
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]);