欢迎来到天天文库
浏览记录
ID:21609336
大小:65.00 KB
页数:16页
时间:2018-10-19
《actionscript 3 互动编程 第三讲》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ActionScript3互动编程第三讲函数前言函数是指,在程序中执行特定的任务并可重用的代码块。在面向过程中,称为闭包函数,在类体中,或与某个对象进行绑定称为该类或对象的方法。函数可接受外部传入的值也可返回运算的结果。一个简单的例子:比如:我们现在有一个任务,就是让多个影片剪辑执行相同的运算即,沿着x轴向左移动,并且逐渐变小,最后消失。如果我们对每一个影片剪辑都输入相同的命令显然不是最佳的做法:mc1.x++mc2.x++mc3.x++mc1.scaleX-=0.1mc2.scaleX-=0.1m
2、c3.scaleX-=0.1前例中只有三个影片剪辑,而且每个影片剪辑所作的属性操作也只有位置和缩放属性,我们还可以接受,如果是有很多影片剪辑呢?或者说如果是一项很复杂的任务需要几十行甚至上百行的代码才能完成,我们这种方法就不适用了。这时候我们就可以考虑把一项相对独立的任务写成一个特定的函数,用到时直接对该函数调用就可以了,这就是面向对象的精髓——代码复用的概念了。函数是实现代码复用最简单的形式。前例的改写movies(mc1)movies(mc2)movies(mc3)functionmovies(
3、mc:MovieClip):void{mc.x++mc.scaleX-=0.1}函数定义法函数的定义有两种方式:一种是函数语句定义法;另外一种是函数表达式定义法.1、函数语句定义法的格式如下:看下例,声明一个函数,功能是角度转换弧度。function函数名(参数1,参数2,...):返回类型{//函数体}functiontoAngle(degree:Number):Number{returndegree*Math.PI/180}采用这种方式进行定义的函数可以获得更加灵活的空间,稍后讨论。我们可以理解
4、为:我们定义了一个变量,然后在内存中申请了一个内存空间并声明了一个匿名函数,将其引用赋值给了变量:var函数名=function(参数1,参数2,...):返回类型{//函数体}2、函数表达式定义法格式vartoAngle=function(degree:Number):Number{returndegree*Math.PI/180}2、两种定义法的区别函数语句定义法更标准在运行中执行顺序会提升,而后者则必须先定义再使用:afun("开心");//报错:值非函数,这条必须注释掉,否则就把afun定义
5、提前bfun("不开心");//成功varafun=function(w:String){trace(w)};functionbfun(s:String){trace(s);}varafun=function(w:String){trace(w)};afun=null//函数被回收的例子函数表达式定义法变量持有的引用一旦改变,函数体就会变成匿名函数,被垃圾回收机制回收:4、函数的参数AS3对函数的参数作了严格的设定,函数调用时参数的个数和类型要严格的和定义时保持一致,否则便一起就会报错:bfun("
6、不开心");//成功bfun(20)//错误1067:int类型值的隐式强制指令的目标是非相关类型String。bfun("20","20")//错误,1137:参数个数不正确。不应超过1个。functionbfun(s:String){trace(s);}4、函数的参数AS3的函数参数传递的是引用:varvarA:Array=[10,20,12]varvarB:Number=2functiontestFunc(a:Array,b:Number){a.push(100)b=10}testFunc(v
7、arA,varB)trace(varA)trace(varB)4、函数的默认参数设定在定义函数时,可以为参数设定初始值,这是在调用该函数时如果没有指定该参数,编译器会自动调用该参数的默认值:functiontestFunc(b:Number=20){trace(b)}testFunc()//20testFunc(5)//54、不确定参数个数的函数functiontestFunc(...rest){trace("传入的参数个数:"+rest.length)for(vari=0;i8、h;i++){trace(rest[i])}}testFunc(1,"4","开心")varfunc:Functionvarsexy:String="男"if(sexy=="男"){func=boyFun}elseif(sexy=="女"){func=girlFun}functionboyFun(){trace("我是一个帅哥")}functiongirlFun(){trace("我是一个美女")}func()代理函数functionsexyFunc(type:*):
8、h;i++){trace(rest[i])}}testFunc(1,"4","开心")varfunc:Functionvarsexy:String="男"if(sexy=="男"){func=boyFun}elseif(sexy=="女"){func=girlFun}functionboyFun(){trace("我是一个帅哥")}functiongirlFun(){trace("我是一个美女")}func()代理函数functionsexyFunc(type:*):
此文档下载收益归作者所有