看书笔记一

    1.  根据数字决定调用函数个数,并动态给对象赋属性
  1. package {
  2.     import flash.display.Sprite;
  3.     public class Sample9261 extends Sprite
  4.     {   
  5.         public function Sample9261()
  6.         {
  7.             var arr:Array = new Array();
  8.             arr.push(aFunc);
  9.             arr.push(bFunc);
  10.             arr.push(cFunc);
  11.             
  12.             var obj:Object = new Object();
  13.             
  14.             for(var i:uint=0;i<arr.length;i++)
  15.             {
  16.                 arr[i](obj);
  17.             }
  18.             
  19.             for(var j:String in obj)
  20.             {
  21.                 trace(j+":"+obj[j]);
  22.             }
  23.             
  24.             for each(var k:String in obj)
  25.             {
  26.                 trace(k);
  27.             }
  28.         }
  29.         
  30.         private function aFunc(obj:Object):void
  31.         {
  32.             obj.attribute1 = true;
  33.             trace("执行了aFunc方法");
  34.         }
  35.         
  36.         private function bFunc(obj:Object):void
  37.         {
  38.             obj.attribute2 = true;
  39.             trace("执行了bFunc方法");
  40.         }
  41.         
  42.         private function cFunc(obj:Object):void
  43.         {
  44.             obj.attribute3 = true;
  45.             trace("执行了cFunc方法");
  46.         }
  47.     }
  48. }
    2.  动态改变函数调用顺序
  1. package {
  2.     import flash.display.Sprite;
  3.     public class Sample9261 extends Sprite
  4.     {   
  5.         public function Sample9261()
  6.         {
  7.             var arrIndex:Array = [2,0,1];
  8.             var arrFunc:Array =  new Array();
  9.             arrFunc.push(aFunc);
  10.             arrFunc.push(bFunc);
  11.             arrFunc.push(cFunc);
  12.                 
  13.             for(var i:uint=0;i<arrIndex.length;i++)
  14.             {
  15.                 arrFunc[arrIndex[i]]();
  16.             }
  17.         }
  18.         
  19.         public function aFunc():void
  20.         {
  21.             trace("this is a function");
  22.         }
  23.         
  24.         public function bFunc():void
  25.         {
  26.             trace("this is b function");
  27.         }
  28.         
  29.         public function cFunc():void
  30.         {
  31.             trace("this is c function");
  32.         }
  33.     }
  34. }
    3.  利用函数返回函数
  1. package {
  2.     import flash.display.Sprite;
  3.     public class Sample9261 extends Sprite
  4.     {   
  5.         public function Sample9261()
  6.         {
  7.             //通过A调用只有一个参数的aFunc():
  8.             chooseFuncBy("A")("A func has only one parameter.");
  9.             //输出:aFunc():A func has only one parameter.
  10.             
  11.             //通过B调用有两个参数的bFunc():
  12.             chooseFuncBy("B")("B func has two parameters.","No.2 parameter");
  13.             //输出:bFunc():B func has two parameters. one more Parameter:No.2 parameter
  14.             
  15.             //字符串不符,默认函数
  16.             chooseFuncBy("wu lala")("I choose A function");
  17.             //输出:Welcome to kingda.org! My blog
  18.             
  19.             var withObj:Object = new Object();
  20.             var myObj:Object = {name:"黑羽",blog:"http://www.kingda.org",hobby:"WowCraft"};
  21.             chooseFuncBy(withObj)(myObj);
  22.             /*输出:
  23.             objectFunc():
  24.             name:黑羽
  25.             blog:http://www.kingda.org
  26.             hobby:WowCraft
  27.             */
  28.         }
  29.         
  30.         public function chooseFuncBy(input:*):Function
  31.         {
  32.             //运用一:利用参数的种类来确定返回的函数
  33.             if(!(input is String))
  34.             {
  35.                 return objectFunc;
  36.             }
  37.             
  38.             //运用二:根据参数内容来返回函数
  39.             switch(input)
  40.             {
  41.                 case "A":
  42.                 return aFunc;
  43.                 case "B":
  44.                 return bFunc;
  45.                 default:
  46.                 return kingdaFunc;
  47.             }
  48.             
  49.             //更多延伸运用:利用参数个数、is确定不同Class的实例来选择函数,等等
  50.         }
  51.         public function aFunc(str:String):void
  52.         {
  53.             trace("aFunc():"+str);
  54.         }
  55.         
  56.         public function bFunc(str1:String,str2:String):void
  57.         {
  58.             trace("bFunc():"+str1+" one more Parameter:"+str2);
  59.         }
  60.         
  61.         public function kingdaFunc(...rest):void
  62.         {
  63.             trace("Welcome to Kingda.org! My blog");
  64.         }
  65.         
  66.         public function objectFunc(kingdaObj:Object):void
  67.         {
  68.             trace("objectFunc():");
  69.             for(var i:String in kingdaObj)
  70.             {
  71.                 trace(i+":"+kingdaObj[i]);
  72.             }
  73.         }
  74.     }
  75. }
    4.  函数动态添加属性,(可以得到该函数被调用次数)
  1. package {
  2.     import flash.display.Sprite;
  3.     public class Sample9261 extends Sprite
  4.     {   
  5.         public function Sample9261()
  6.         {
  7.             var shot:Function = function():void{
  8.                 shot["times"]++;
  9.                 trace("Shot():time:"+shot["times"]);
  10.             }
  11.             
  12.             shot["times"] = 0;  //初始化times
  13.             shot();  //输出:Shot():times:1
  14.             shot();  //输出:Shot():times:2
  15.             shot();  //输出:Shot():times:3
  16.         }
  17.     }
  18. }
    5.  函数对象动态添加实例方法
  1. package {
  2.     import flash.display.Sprite;
  3.     public class Sample9261 extends Sprite
  4.     {   
  5.         public function Sample9261()
  6.         {
  7.             var shot:Function = function():void
  8.             {
  9.                 shot["times"]++;
  10.                 trace("Shot():times:"+shot["times"]);
  11.                 shot["reload"]();
  12.                 //其他代码
  13.             }
  14.             
  15.             shot["times"] = 0; //初始化times
  16.             
  17.             shot["reload"] = function():void
  18.             {
  19.                 trace("reload:"+this["times"]);
  20.                 if(this["times"]>3)
  21.                 {
  22.                     this["times"] = 0;
  23.                 }
  24.             }
  25.             
  26.             shot["reload"]();
  27.             shot();
  28.             shot();
  29.             shot();
  30.             shot();
  31.             shot();
  32.             shot();
  33.         }
  34.     }
  35. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值