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..
沒有留言:
張貼留言