2010-08-17 210 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來代替。