As3 中的函数

本文深入探讨了ActionScript 3 (AS3) 中函数的多种高级应用技巧,包括使用arguments对象进行递归调用、函数类型检测、传递任意数量参数、设置代理函数、创建函数执行队列、利用函数返回函数、动态添加实例属性和方法等内容。

AS3中的函数  

2009-05-03 14:33:05|  分类: AS3|字号 订阅

主要内容  :

 /*20090503*/
   //test();//函数测试 arguments对象的使用
   //testA(1,2,[1,2],{name:"wangdh"});//函数传入任意多参数的用法 ...rest;
   //funTest();//函数类型测试
   //fun_one();//函数使用技巧一:设立代理函数
   //fun_two();//函数使用技巧二:建立函数执行队列
   //fun_three();//函数使用技巧三:利用函数返回函数
   //fun_four();//函数使用技巧四:函数动态添加实例属性
   //fun_five();//函数使用技巧五:函数动态添加实例方法

将以下代码复制到上上贴的函数中

  /****************20090503*************************/
  //函数测试 arguments对象的使用
  public function test(a:int=1,b:int=2,c:int=3):void {
   trace(a + b + c);
   trace("参数长度:" + arguments.length);
   if (a + b + c > 0) {
    arguments.callee(a - 1,b - 1,c - 1);
   }
  }
  //函数类型测试
  public function funTest():void {
   trace(getQualifiedClassName(testA));//输出函数内置类型对象
   trace(getQualifiedSuperclassName(testA));//输出函数类的父类
   trace(testA is Function);//是否是函数类型
   trace(testA is Object);//是否是对象
   /***********************************************/
   var bFun:Function = function():void{trace("this is bFun");};
   trace(getQualifiedClassName(bFun));//bFun类型
   trace(bFun is Function);//是否是函数类型
   trace(bFun is Object);//是否是Object类型
  }
  //传入任意多参数的使用(...rest)
  public function testA(...paras):void {
   trace("传入参数个数:"+paras.length);
   for(var i in paras){;
   trace("第"+i+"个为"+paras[i]);
  }
 }
 /*函数使用技巧*/
 //1.设置代理函数对象
 public function fun_one():void {
  var kingdaFunc:Function;
  var sex = "male";
  if (sex=="male") {
   kingdaFunc = maleFunc;
  } else if (sex=="female") {
   kingdaFunc = femaleFunc;
  }
  kingdaFunc();
  function maleFunc():void {
   trace("I am a boy");
  }
  function femaleFunc():void {
   trace("I am a girl");
  }
 }
 //2.设置函数运行队列
 public function fun_two():void {
  //保存函数队列
  var funArray:Array = new Array();
  funArray.push(funcA);
  funArray.push(funcB);
  funArray.push(funcC);
  function funcA():void {
   obj.funcA = true;
   trace("funcA执行");
  }
  function funcB():void {
   obj.funcB = true;
   trace("funcB执行");
  }
  function funcC():void {
   obj.funcC = true;
   trace("funcC执行");
  }
  //共操作的对象
  var obj:Object = new Object();
  //函数执行次数,此参数在实际中可以改变
  var execNum:Number = funArray.length;
  //核心步骤:函数队列执行,实际中的可以把它包装成一个函数,或一个类的实例
  for(var i:Number = 0;i<execNum;i++){;
  funArray[i](obj);
  for(var str in obj){;
  trace(str+":"+obj[str]);
 }
}
}
//3.利用函数返回函数
public function fun_three():void {
chooseFuncBy("A")(" A function has only one parameter;");
chooseFuncBy("B")(" B function has two parameters","No 2 parameter");
chooseFuncBy("wu")(" I choose A function~","I choose B function","I choose V function");
var withObj:Object = new Object();
var myObj:Object = {name:"wangdh",blog:"dd"};
chooseFuncBy(withObj)(myObj);
function chooseFuncBy(input:*):Function {
 //利用参数的种类确定返回的函数
 if (!(input is String)) {
  return objFunc;
 }
 //利用参数内容来确定返回的函数
 switch (input) {
  case "A" :
   return aFunc;
  case "B" :
   return bFunc;
  default :
   return kingdaFunc;
 }
 //更多延伸运用:利用参数个数、is确定不同Class的实例来选择函数
}
function aFunc(nS:String):void {
 trace("aFunc"+nS);
}
function bFunc(nS:String,nP:String):void {
 trace("bFunc"+nS+"Sec:"+nP);
}
function kingdaFunc():void {
 trace("Welcome!!");
}
function objFunc(obj:Object):void {
 trace("objFunc():");
 for(var i in obj){;
 trace(i+":"+obj[i]);
}
}
}
//函数技巧四:函数动态添加实例属性
public function fun_four():void {
var shot:Function = function():void{
shot['times']++;
trace("shot times:"+shot['times']);
};
shot['times'] = 0;
shot();
shot();
shot();
}
//函数技巧五:函数对象动态添加实例方法
public function fun_five():void {
var shot:Function = function():void{
shot['times']++;
shot['reload']();
trace("shot times:"+shot['times']);
};
shot['times'] = 0;
shot['reload'] = function():void{
trace("reload:"+this['times']);
if(this['times']>3){
this['times'] = 1;
}
};

shot['reload']();
shot();
shot();
shot();
shot();
shot();
shot();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值