apply(thisArg:*, argArray:*):*
call(thisArg:*, ... args):*
最大的不同就是apply是將參數指定為一個 Array 對象。
如果在腳本實際執行前,無法知道要傳遞的參數的數量,那麼這種方法通常很有用。
(官方文件 : ActionScript 3.0 語言和組件參考 - Function)
一點例子
關於apply的應用:apply關鍵作用還是調整參數個數問題,避免個數不統一。多用在..res這種情況的時候。
package {
     import flash.display.*;
     public class Main extends Sprite{
         public function Main() {
             execFunc(test);
         }         
         private function execFunc(closure:Function, ...rest):void{
            // closure(rest);//如果把下邊的註釋掉改為本行,則
                                    //提示:test() 的參數數量不匹配。應該有 0 個,當前為 1 個。
            closure.apply(this,rest);//此處this換成null也可以。
         }
         private function test():void{
             trace("test");
         }
     }
}
vanchor的actionscript3.0小窩 - as3 將函數作為參數傳遞,及...(res)關鍵字,apply()方法,偵聽函數帶參傳遞
修改過後的doNext:
private function doNext(time:Number, func:Function, ... parameter):void
{
    var timer:Timer = new Timer(time * 1000, 1);
    timer.addEventListener(TimerEvent.TIMER_COMPLETE, 
        function(e:TimerEvent) { func.apply(null, parameter); );
    timer.start();
}
還沒有考慮garbage collection..
沒有留言:
張貼留言