专注于 ActionScript 3.0 在各应用领域的研究。
« AS3 方法重载Flash/Flex/.net remoting通讯--Fluorine安装 »

定义函数时的...(rest)参数

    在As3.0中,Function的参数数是被严格限制的,如果定义的参数数与实际参数不同时,系统会报错(incorrect number of arguments),那么,“... (rest) parameter”大概就是被派来解救那些困扰于这个问题的孩子们的...

    我写了一个例子来描述我对此的学习成果,正确的运行结果应该是输出:
    3
    4

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) ,暂且表过吧.

载自:http://www.2solo.cn/

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Code detection by Codefense

Copyright 2008-2010 DMH2002's Blog Some Rights Reserved.沪ICP备07021739号