0

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

问题是,当我尝试将带有参数的函数推送到数组中时,由于 (),该方法被调用,如下所示:

arr.push(someFunction(2));

另外,如果我有这个:

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

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

有没有简单的方法来实现这一点?我想我可以传递一个对象或传递一个数组作为参数,但也许我只是错过了一些东西。

4

4 回答 4

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]();
于 2013-10-18T19:47:25.893 回答
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);
于 2013-10-19T03:06:41.937 回答
0

好的,通常我建议创建保留函数名称和参数的对象,然后使用 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
于 2013-10-18T20:03:49.363 回答
0

潘的答案是要走的路,我想添加我的解释。在像 ActionScript 这样的脚本语言中,会立即评估函数调用。因此,当您编写类似arr.push(someFunction(2));没有将函数本身推送到数组中的内容时,您正在推送函数的结果。为了引用函数本身,您必须将函数名称放在不带括号的位置。在 C 等其他语言中,存储函数的变量称为委托。

你能解释一下你想用这个来完成什么吗?我怀疑有比将函数存储在数组中更好的方法。

于 2017-06-18T02:51:15.253 回答