在As3.0中,Function的参数数是被严格限制的,如果定义的参数数与实际参数不同时,系统会报错(incorrect number of arguments) ,那么,“… (rest) parameter”大概就是被派来解救那些困扰于这个问,的孩子们的…
package { import flash.display.Sprite; public class ArgTest extends Sprite { private var argArr:Array=new Array(”EEE”,”FFF”,”GGG”,”HHH”); private var obj=new Object(); public function ArgTest() { myArgFunc(”AAA”, “BBB”,”CCC”); myArgFunc.apply(null,argArr) } public function myArgFunc(…args):void { //取args做为参数数组名 trace(args); } } }
从程序中可见,…args在作为参数集时与arguments class很相似.可其实args与arguments class的方法完全无关,两者不可混淆。
如下例是可行的:
package { import flash.display.Sprite; public class ArgTest extends Sprite { private var argArr:Array=new Array(”EEE”,”FFF”,”GGG”); private var count:Number=0; public function ArgTest() { myArgFunc(”AAA”, “BBB”,”CCC”); } public function myArgFunc(A,B,C):void { trace(arguments); if (count++<10) { myCallee(arguments.callee); } } public function myCallee(caller:Function) { caller.apply(null,argArr); } } }
如果取用…args作为参数,则不管取args.callee还是arguments.callee都是无效的.须注意,在As3中,推荐用“… (rest) parameter”方法来代替arguments的(ActionScript 3.0 includes a new ...(rest) keyword that is recommended instead of the arguments class.).
另外发现Array.sort()和Array.splice()也用到了…(rest) ,暂且表过吧.