资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ActionScript 3 互动编程,第三讲 函数,ActionScript 3 互动编程第三讲 函数,1,前言,函数是指,在程序中执行特定的任务并可重用的代码块。在面向过程中,称为闭包函数,在类体中,或与某个对象进行绑定称为该类或对象的方法。,函数可接受外部传入的值也可返回运算的结果。,前言,2,一个简单的例子:,比如:我们现在有一个任务,就是让多个影片剪辑执行相同的运算即,沿着x轴向左移动,并且逐渐变小,最后消失。如果我们对每一个影片剪辑都输入相同的命令显然不是最佳的做法:,mc1.,x,+,mc2.,x,+,mc3.,x,+,mc1.,scaleX,-=0.1,mc2.,scaleX,-=0.1,mc3.,scaleX,-=0.1,一个简单的例子:mc1.x+,3,前例中只有三个影片剪辑,而且每个影片剪辑所作的属性操作也只有位置和缩放属性,我们还可以接受,如果是有很多影片剪辑呢?或者说如果是一项很复杂的任务需要几十行甚至上百行的代码才能完成,我们这种方法就不适用了。这时候我们就可以考虑把一项相对独立的任务写成一个特定的函数,用到时直接对该函数调用就可以了,这就是面向对象的精髓代码复用的概念了。函数是实现代码复用最简单的形式。,前例中只有三个影片剪辑,而且每个影片剪辑所作的属性操作也只有,4,前例的改写,movies(mc1),movies(mc2),movies(mc3),function,movies(mc:,MovieClip,):,void,mc.,x,+,mc.,scaleX,-=0.1,前例的改写movies(mc1),5,函数定义法,函数的定义有两种方式:一种是函数语句定义法;另外一种是函数表达式定义法.,1、函数语句定义法的格式如下:,看下例,声明一个函数,功能是角度转换弧度。,function 函数名(参数1,参数2,.):返回类型,/函数体,function,toAngle(degree:,Number,):,Number,return,degree*,Math.PI,/180,函数定义法function 函数名(参数1,参数2,.),6,采用这种方式进行定义的函数可以获得更加灵活的空间,稍后讨论。我们可以理解为:我们定义了一个变量,然后在内存中申请了一个内存空间并声明了一个匿名函数,将其引用赋值给了变量:,var 函数名=function(参数1,参数2,.):返回类型,/函数体,2、函数表达式定义法格式,var,toAngle=,function,(degree:,Number,):,Number,return,degree*,Math.PI,/180,采用这种方式进行定义的函数可以获得更加灵活的空间,稍后讨论。,7,2、两种定义法的区别,函数语句定义法更标准在运行中执行顺序会提升,而后者则必须先定义再使用:,afun(开心);/报错:值非函数,这条必须注释掉,否则就把afun定义提前,bfun(不开心);/成功,var,afun=,function,(w:,String,),trace,(w),;,function,bfun(s:,String,),trace,(s);,2、两种定义法的区别afun(开心);/报错:值非函数,8,var,afun=,function,(w:,String,),trace,(w),;,afun=null,/函数被回收的例子,函数表达式定义法变量持有的引用一旦改变,函数体就会变成匿名函数,被垃圾回收机制回收:,var afun=function(w:String)函数,9,4、函数的参数,AS3对函数的参数作了严格的设定,函数调用时参数的个数和类型要严格的和定义时保持一致,否则便一起就会报错:,bfun(不开心);/成功,bfun(20)/错误1067:int 类型值的隐式强制指令的目标是非相关类型 String。,bfun(20,20)/错误,1137:参数个数不正确。不应超过 1 个。,function bfun(s:String),trace(s);,4、函数的参数bfun(不开心);/成功,10,4、函数的参数,AS3的函数参数传递的是引用:,var varA:Array=10,20,12,var varB:Number=2,function testFunc(a:Array,b:Number),a.push(100),b=10,testFunc(varA,varB),trace(varA),trace(varB),4、函数的参数var varA:Array=10,20,1,11,4、函数的默认参数设定,在定义函数时,可以为参数设定初始值,这是在调用该函数时如果没有指定该参数,编译器会自动调用该参数的默认值:,function testFunc(b:Number=20),trace(b),testFunc()/20,testFunc(5)/5,4、函数的默认参数设定function testFunc(b,12,4、不确定参数个数的函数,function testFunc(.rest),trace(传入的参数个数:+rest.length),for(var i=0;irest.length;i+),trace(resti),testFunc(1,4,开心),4、不确定参数个数的函数function testFunc(,13,var func:Function,var sexy:String=男,if(sexy=男),func=boyFun,else if(sexy=女),func=girlFun,function boyFun(),trace(我是一个帅哥),function girlFun(),trace(我是一个美女),func(),代理函数,var func:Function代理函数,14,function sexyFunc(type:*):Function,if(type=男),return boyFun;,else if(type=女),return girlFun;,else,return erroFun;,利用函数返回函数,function boyFun(),trace(我是一个帅哥);,function girlFun(),trace(我是一个美女);,function erroFun(),trace(参数传入不符!);,var chick:Function=sexyFunc(男);,chick(),function sexyFunc(type:*):Func,15,函数综合练习格式化时间函数的编写,function formatTime(h:*,m:*,s:*):String,var _h:String=format(h);,var _m:String=format(m);,var _s:String=format(s);,var _result=_h+:+_m+:+_s;,return _result;,function format(n:*):String,var _n=Number(n);,if(_n10),_n=0+_n;,else,_n=_n;,return String(_n);,trace(formatTime(1,12,9),函数综合练习格式化时间函数的编写function for,16,
展开阅读全文