将参数传递给函数引用?

时间:2010-08-17 22:56:12

标签: flash actionscript-3

我正在尝试编写一个可以执行任何功能的性能测试函数,运行X次并吐出该函数在AS3中运行多长时间。如果一个函数不接受任何参数但是它会产生错误,我已经让它工作得很好。

以下是代码:

public static function testFunction(targetFunction : Function, object : Object, ... parameters)
{
    var iterations : int = 10000;
    var i : int = 0;
    var time0 : Number = 0;
    var time1 : Number = 0;

    if (parameters.length == 0)
    {
        time0 = getTimer();

        for (i = 0; i < iterations; ++i)
        {
            targetFunction();
        }

        time1 = getTimer();
    }
    else
    {
        time0 = getTimer();

        for (i = 0; i < iterations; ++i)
        {
            targetFunction.call(object, parameters);
        }

        time1 = getTimer();
    }

    trace("Took " + (time1 - time0) + "ms to complete " + iterations + " iterations");
}

这很好用: testFunction(timelineMethod)

但是这样的话: testFunction(game.addGameState,game,gameState); // gameState将是参数

抛出这个: TypeError:错误#1034:类型强制失败:无法将[] @ 2f46491转换为g2d.GameState。     在功能/ http://adobe.com/AS3/2006/builtin::call()

似乎游戏或gameState不是有效的实例,但它们肯定是。所以我假设它不知道要测试的方法属于哪个对象并抛出此错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

function.call需要一个参数列表,就像你正常调用函数一样。

如果要传递一系列参数,则应使用function.apply代替。