我正在尝试编写一个可以执行任何功能的性能测试函数,运行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不是有效的实例,但它们肯定是。所以我假设它不知道要测试的方法属于哪个对象并抛出此错误。
有什么想法吗?
答案 0 :(得分:2)
function.call
需要一个参数列表,就像你正常调用函数一样。
如果要传递一系列参数,则应使用function.apply
代替。