我正在试图找出我正在制作的游戏的逻辑,计划是将一组函数存储到数组或向量中,每个函数都有一个参数。
问题在于,当我尝试将带参数的函数推送到Array中时,该方法因为()而被调用,如下所示:
arr.push(someFunction(2));
如果我有这个:
var arr:Array = new Array();
arr.push(someFunction(2));
arr[0]();
它显然不起作用,因为最后一行没有传递任何参数。
有没有简单的方法来实现这一目标? 我想我可以传递一个Object或传递一个数组作为参数,但也许我只是遗漏了一些东西。
答案 0 :(得分:1)
你应该使用封闭。
例如..
function returnFuncWithArg(arg:Number):Function {
var closureFunc:Function = function():void {
someFunction(arg);
}
return closureFunc;
}
和
var arr:Array = new Array();
arr.push(returnFuncWithArg(2));
arr[0]();
答案 1 :(得分:1)
您可以保存功能和参数,然后在需要时获取它们
var functions:Array = [];
functions.push([someFunction, [2]]);//the parameter should be an array
var targetFunction:Function = functions[0][0] as Function;
var targetParameter:Array = functions[0][1] as Array;
targetFunction.apply(null, targetParameter);
答案 2 :(得分:0)
通常我会建议创建保存函数名称和params的对象,然后使用util类的回调来调用它们......但是这是一个很长的故事,除了ton的答案。 有了这个你不再需要像returnFuncWithArg那样创建函数......
function returnFuncWithArg(func:Function, ...args):Function {
var closureFunc:Function = function():void {
//--calls function with multiple or single arguments
func.apply(null, args);
}
return closureFunc;
}
function testFunction1(a:Number)
{
trace(a);
}
function testFunction2(a:Number,b:Number):void
{
trace(a+b);
}
var callback:Function;
callback = returnFuncWithArg(testFunction1, 10);
callback();//--output 10
callback = returnFuncWithArg(testFunction2, 23,12);
callback();//--output 35
答案 3 :(得分:0)
潘的回答是要走的路,我想补充说明。在像ActionScript这样的脚本语言中,会立即评估函数调用。因此,当您编写类似arr.push(someFunction(2));
的内容时,您并未将函数本身推入数组中,而是推动函数的结果。为了引用函数本身,您必须将函数名称放在没有括号的位置。在像C这样的其他语言中,存储函数的变量称为委托。
你能用这个解释一下你想要实现的目标吗?我怀疑有一种比将数据存储在数组中更好的方法。