2010-08-17 256 views
1

我正在尝试编写一个性能测试函数,它可以接受任何函数,运行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,游戏,游戏状态); // gameState将是参数

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

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

任何想法?

回答

2

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

如果您想要传递一组参数,则应该使用function.apply来代替。