AS3将带参数的函数推入数组或向量

时间:2013-10-18 19:35:15

标签: actionscript-3

我正在试图找出我正在制作的游戏的逻辑,计划是将一组函数存储到数组或向量中,每个函数都有一个参数。

问题在于,当我尝试将带参数的函数推送到Array中时,该方法因为()而被调用,如下所示:

arr.push(someFunction(2));

如果我有这个:

var arr:Array = new Array();
arr.push(someFunction(2));
arr[0]();

它显然不起作用,因为最后一行没有传递任何参数。

有没有简单的方法来实现这一目标? 我想我可以传递一个Object或传递一个数组作为参数,但也许我只是遗漏了一些东西。

4 个答案:

答案 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这样的其他语言中,存储函数的变量称为委托。

你能用这个解释一下你想要实现的目标吗?我怀疑有一种比将数据存储在数组中更好的方法。