第2章 Flex 4脚本语言:ActionScript 30基础

上传人:e****s 文档编号:243710731 上传时间:2024-09-29 格式:PPT 页数:79 大小:677KB
返回 下载 相关 举报
第2章 Flex 4脚本语言:ActionScript 30基础_第1页
第1页 / 共79页
第2章 Flex 4脚本语言:ActionScript 30基础_第2页
第2页 / 共79页
第2章 Flex 4脚本语言:ActionScript 30基础_第3页
第3页 / 共79页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,2,章,Flex 4,脚本语言:基础,2.1 ActionScript,语言概述,2.2,基本语言元素,运算符和表达式,流程控制,函数,面向对象编程,语言概述,简介,ActionScript,是,Adobe Flash Player,和,Adobe AIR,运行环境下的编程语言,由嵌入在,Flash Player,中的,ActionScript,虚拟机(,AVM,)执行。,ActionScript,代码通常由编译器(如,Adobe Flash CS4 Professional,或,Adobe Flash Builder,的内置编译器,或,Adobe Flex SDK,中提供的编辑器)编译为“字节代码格式”(一种由计算机编写并且计算机能够理解的编程语言),字节码嵌入在,SWF,文件中,,SWF,文件由,Flash Player,和,AIR,执行。,2.1.2,在,Flex,中应用,ActionScript,1,在,MXML,中编写,ActionScript,在,MXML,文件中插入,标签,即可编写,ActionScript,代码。例如:,2.1.2,在,Flex,中应用,ActionScript,2,在,AS,文件中编写,ActionScript,(,1,)启动,Flash Builder 4,,选择要在其中创建,ActionScript,类的,Flex,项目,单击“新建”按钮选择“,ActionScript,类”菜单项,弹出“新建,ActionScript,类”对话框,如图,所示。,2.1.2,在,Flex,中应用,ActionScript,(2)在“包”文本框中输入类所在的包;在“名称”文本框中输入类名,类名必须以大写字母开头;在“修饰符”栏选择类的类型,其中“public”表示公有类,“internal”表示内部类。,在项目的src目录下将新建一个包,包中包含文件,如图所示。,2.1.2,在,Flex,中应用,ActionScript,(3)双击打开文件,代码编辑器中自动生成部分创建ActionScipt类的代码,如图所示。,2.1.2,在,Flex,中应用,ActionScript,用户可以在代码编辑器的“,package com.flex.demo,”中定义,ActionScript,类,例如,要定义一个计算圆面积的类,可以使用以下代码:,public class Circle,/,定义常量,private const PAI:Number = 3.14;,/,定义属性: 半径,private var radius:Number ;,/,构造方法,public function Circle(radius:Number),this.radius = radius ;,/,获得圆的面积方法,public function area():Number,return this.PAI*this.radius*this.radius;,2.1.2,在,Flex,中应用,ActionScript,3,在,MXML,文件中引用,ActionScript,类,(,1,)使用,source,属性引用,ActionScript,文件。语法格式如下:,例如:,(,2,)使用,import,语句引入,ActionScript,类。,如果,.as,文件中定义的是一个,ActionScript,类,可以使用,import,语句引入,语法格式如下:,import,类所在的包,例如,在主程序文件中引入,Circle,类,可以使用如下代码:,2.1.3,使用,ActionScript,控制,MXML,标签,例如,,MXML,中使用,标签定义按钮,而,ActionScript,中可以使用,Button,类定义按钮;,标签可以使用,Label,属性定义按钮的文本,而,ActionScript,中使用,Button,类的,Label,属性定义按钮文本。,示例代码,。,执行结果如图所示。,2.2,基本语言元素,2.2.1,语法规则,中有一些需要遵循的语法规则,主要包含以下几点。,(,1,)大小写。,(,2,)分号。,(,3,)注释。,(,4,)关键字和保留字,。,(,5,)点。点操作符提供进入一个对象的属性和方法的路径。,2.2.1,语法规则,表列出了的词汇关键字。,词汇关键字,词汇关键字,词汇关键字,词汇关键字,词汇关键字,as,break,case,catch,class,const,continue,default,delete,do,else,extends,false,finally,for,function,if,implements,import,in,instanceof,interface,internal,is,native,new,null,package,private,protected,public,return,super,switch,this,throw,to,true,try,typeof,use,var,void,while,with,2.2.1,语法规则,表列出了的句法关键字。,句法关键字,句法关键字,句法关键字,句法关键字,句法关键字,each,get,set,namespace,include,dynamic,final,native,override,static,标识符是供将来使用的保留字,建议不要使用这些标识符,如表所示。,保,留 字,保,留 字,保,留 字,保,留 字,保,留 字,abstract,boolean,byte,cast,char,debugger,double,enum,export,float,goto,intrinsic,long,prototype,short,synchronized,throws,transient,type,virtual,volatile,2.2.2,数据类型,1,基元数据类型,(,1,),Boolean,。,Boolean,数据类型为逻辑数据类型,包含,true,和,false,两个值。,(,2,),int,。,int,数据类型在内部存储为,32,位整数,包含的整数集介于,-2,147,483,648,(,-2,31,), 2,147,483,647,(,2,31, 1,)之间(包含两端)。,(,3,),Number,。,Number,数据类型可以表示整数、无符号整数和浮点数。,(,4,),uint,。,uint,数据类型在内部存储为,32,位无符号整数,包含的整数集介于,0,和,4,294,967,295 (2,32,-1),之间(包括,0,和,4,294,967,295,)。,(,5,),String,。,String,数据类型表示一个,16,位字符的序列。,(,6,),Null,。,Null,数据类型仅包含一个值,即,null,。,(,7,),void,。,void,数据类型仅包含一个,undefined,值。,2.2.2,数据类型,2,复杂数据类型,(,1,),Object,。,Object,数据类型是由,Object,类定义的。,Object,类用做,ActionScript,中的所有类定义的基类。,(,2,),Array,。,可以使用以下四种方式声明,Array,数组:,var,变量名:,Array=new Array(),;,var,变量名:,Array=new Array(,数组长度,);,var,变量名:,Array=new Array(,元素,1,,元素,2);,var,变量名:,Array=,元素,1,,元素,2;,(,3,),Date,。,可以使用如下方式创建时间对象:,var now:Date = new Date();,(,4,),Error,。,Error,类可用于引发异常,它是,ECMAScript,中所定义的其他异常,类的,基类。,(,5,),Function,。,(,6,),RegExp,。,(,7,),XML,和,XMLList,。,2.2.3,变量和常量,1,变量,(,1,)变量的声明。,要声明一个变量,必须使用,var,关键字。例如,下面的,ActionScript,语句声明一个名为,i,的变量:,var i;,(,2,)变量赋值。,可以使用赋值运算符(,=,)为变量赋值。例如,声明一个,Number,类型变量,i,并将值,赋给它,代码如下所示:,var i:Number;,i = 20.8;,2.2.3,变量和常量,2,变量的作用域,变量的“作用域”是指可以访问变量的代码区域。,例如,下面的代码声明一个全局变量:,var str:String = This is Global String,!,;,function pri(),trace(str);,/,全局变量,pri();,trace(str);,/,全局变量,3,常量,常量也是一个名称,表示计算机内存中具有指定数据类型的值,就这一点而言,常量与变量极为相似。,2.2.4,类型转换,1,自动转换,自动转换遵循以下三点规则。,(,1,)如参与运算的变量类型不同,则先转换成同一类型,然后进行运算。,(,2,)转换按数据长度增加的方向进行,以保证精度不降低。例如,当,int,型和,Number,型运算时,先把,int,转成,Number,后再进行计算。,(,3,)在赋值运算中,当两边的数据类型不同时,将赋值符号右边的类型转换成左边的类型。如果右边的数据类型长度比左边长,将丢失一部分数据。,例如:,var s:int,r:int=5;,s=r*r*PI;,2.2.4,类型转换,2,强制转换,表,、表,和表,列出了不同数据类型之间的转换结果。,数 据 类 型,转 换 结 果,Boolean,true为1,false为0,Date,转换为从,1970年1月1日24时开始计算的毫秒值,null,0,Object,如果实例为,null,转换为NaN,其他为0,String,如果是数字则转换为数字,否则为,0,undefined,转换为,NaN,其他为0,数 据 类 型,转 换 结 果,Number、int、uint,如果为,0转换为false,否则为true,null,false,Object,如果实例为,null,转换为false,否则为true,Sring,如果是,null或空字符串,转换为false,否则为true,数 据 类 型,转 换 结 果,Number、int、unit,数字字符串,null,null,Date,日期字符串,Array,所有数组元素组成的字符串,Object,如果实例为,null,转换为null,否则为(object Object),Boolean,false或者true,2.3,运算符和表达式,2.3.1,表达式,表达式是由常量、变量、函数和运算符按照一定的语法规则组成的序列。每个表达式都有一个值及其类型。表达式求值按照运算符的优先级和结合性规定的顺序进行。例如,以下表达式所示:,x,、,x+y,、,x*y,、,x/y,、,x%y,、,(x+y)*(x-y),、,x + y,2.3.2,运算符,运算符按照操作数的个数可以分为一元运算符、二元运算符和三元运算符。,一元运算符:具有一个操作数,如递增运算符(,+,)和递减运算符(,-,)。,二元运算符:具有两个操作数,如,+,、,-,、,*,、,/,、,%,。,三元运算符:具有三个操作数,如,?,:。,运算符按照其功能的不同分为以下,7,类。,算术运算符:如,+,、,-,、,*,、,/,、,%,、,+,、,-,。,逻辑运算符:如,!,、,&,、,|,。,比较运算符:如,、,=,、,= =,、,!=,。,条件运算符:如,?,:。,位运算符:如,、,、,&,、,|,、,、,。,赋值运算符:如,=,、,+=,、,-=,。,其他运算符:下标运算符,、分量运算符。,2.3.3,算术运算符,1,一元运算符,如“,+x,”表示,x,的值先加,1,,然后返回,x,。“,x+,”表示先返回,x,,然后,x,的值加,1,。前减和后减的原理与加法类似。例如:,var x:Number = 0;,trace(+x);,/,输出,1,trace(x);,/,输出,1,trace(x+);,/,输出,1,trace(x);,/,输出,2,2,二元运算符,(,1,)加法运算符“,+,”为双目运算符,表示两个操作数相加。,(,2,)减法运算符“,-,”为双目运算符,表示两个操作数相减,“,-,”也可以作为负值运算符,此时为单目运算符,如“,-5,”。,(,3,)乘法运算符“,*,”表示两个操作数相乘。,(,4,)除法运算符“,/,”表示两个操作数相除,若参与运算的操作数都为整型,则结果也为整型。若其中有一个为实型,则结果为实型。,(,5,)求余运算符“,%,”表示两个操作数相除求余数。,2.3.4,逻辑运算符,(,1,)非运算符“!”为单目运算符,具有右结合性。参与运算的操作数为,true,时,结果为,false,;操作数为,false,时,结果为,true,。例如:,trace(!(10);,/,输出,false,由于,1 0,为,true,,则非运算后的结果为,false,。,(,2,)与运算符“,&,”为双目运算符,具有左结合性。当参与运算的两个操作数都为,true,时,结果才为,true,,否则为,false,。例如:,trace(true/,/,输出,false,trace(true,/,输出,true,(,3,)或运算符“,|,”为双目运算符,具有左结合性。当参与运算的两个操作数只要有一个为,true,,结果就为,true,。当两个操作数都为,false,时,结果才为,false,。例如:,trace(false|true);,/,输出,true,trace(false|false);,/,输出,false,2.3.5,比较运算符,比较运算符用于对两个值进行比较。比较运算符包括“,”(大于)、“,=,”(大于等于)、“,2);,/,输出和,false,trace(1=2);,/,输出,false,trace(1=2);,/,输出,true,2.3.6,条件运算符,条件运算符“,?,:”是三元运算符,用于条件求值。格式如下所示:, ? ,:,第一个操作数必须是布尔表达式,其含义是当布尔表达式为真时,整个表达式取表达式,1,的值,否则取表达式,2,的值。例如:,trace(12?3:4);,/,输出,3,2.3.7,位运算符,(1)位与“&”运算符是双目运算符,其功能是把参与运算的两个数各自对应的二进位相与,只有对应的两个二进位均为1时,结果才为1,否则为0。参与运算的两个数以补码形式出现。例如,9&5的算式如下:,00001001(9的二进制补码),&00000101(5的二进制补码),00000001(1的二进制补码),(2)位或“|”运算符是双目运算符,把参与运算的两个数各自对应的二进制位相或。,(3)位非“”运算符为单目运算符,对参与运算的数的各个二进制位按位求反。,(4)位异或“”运算符是双目运算符,把参与运算的两个数所对应二进制位相异或。,(5)左移“”运算符是双目运算符,把“”运算符是双目运算符,把“”运算符左边的数的二进制位全部右移若干位。,2.3.8,赋值运算符,(,1,)简单赋值运算符“,=,”是最常用的一个运算符。,(,2,)复合算数赋值运算符包括,+=,、,-=,、,*,=,、,/=,和,%=,。算数赋值运算符和算数运算符是一一对应的关系,它们和赋值运算符一样,运算符左边必须为变量。,(,3,)复合位运算赋值运算符包括,&=,、,|=,、,=,、,=,、,=,。,2.3.9,其他运算符,(,1,)下标运算符“,”是数组中用于取得数组元素的运算符,例如:,var arr:Array = a, b;,trace(arr0);,/,输出,a,(,2,)分量运算符“,.,”用于获得属性和方法,例如:,var arr:Array = a, b;,trace(arr.length);,/,输出,2,2.4,流程控制,2.4.1,条件控制语句,1,ifelse,语句,(,1,),if,语句。,if,语句只用一个,if,条件当做单纯的判断,语法格式如下:,if (condition),/,语句块,其中,condition,为判断的条件表达式,表达式返回值为布尔型。如果表达式返回,true,,则执行花括号“,”中的,ActionScript,语句块;如果表达式返回,false,,则跳过这段代码。例如:,if(21),/,判断,2,是否大于,1,trace(21);,/,输出“,21,”,2.4.1,条件控制语句,(,2,),ifelse,语句。,if,语句在结构上有一个缺陷,就是如果不满足条件,那么不会做任何处理,也不会返回任何结果。在后面加上一个,else,条件则可以避免这个问题,语法格式如下:,if (condition),/,代码段,1,else,/,代码段,2,2.4.1,条件控制语句,(,3,),ifelse ifelse,语句。,当需要判断的条件不止一个时,不能只使用一个,if,条件做判断,例如判断一个数等于不同值的情况,这时可以在中间加上,else if,判断,语法格式如下:,if(condition1),/,代码段,1,else if(condition2),/,代码段,2,else,/,代码段,n,2.4.1,条件控制语句,2,swith,语句,switch,语句非常类似于,if,语句,因为它也是根据条件选择性地执行某段程序代码块。,如同,ifelse ifelse,语句一样。语法格式如下:,switch(expr),case expr 1:,/,代码段,1,break;,case expr 2:,/,代码段,2,break;,default:,/,代码段,n,2.4.1,条件控制语句,程序中,break,语句的作用是跳出程序,使程序停止运行。例如:,import mx.controls.Alert;,var date:Date = new Date();,var d:Number = date.getDay();,/,获取当前的星期数,var result:String = null ;,switch(d),case 1:result=,星期一,; break;,case 2:result=,星期二,; break;,case 3:result=,星期三,; break;,case 4:result=,星期四,; break;,case 5:result=,星期五,; break;,case 6:result=,星期六,; break;,case 0:result=,星期日,; break;,default:result=,出错了!,;break ;,Alert.show(result);,2.4.2,循环控制语句,1,for,循环,for,语句的格式如下:,for(,表达式,1;,表达式,2;,表达式,3),/,代码段,表达式,1,在循环开始前无条件求值一次,这里通常设置一个初始值。表达式,2,是一个条件,在循环开始前首先测试表达式,2,的值。如果表达式,2,的值为,false,则结束循环,如果为,true,则执行代码段中的语句,循环执行完一次后执行表达式,3,。执行完表达式,3,之后继续判断表达式,2,的值,如果为,true,则继续循环,如果为,false,则结束循环。,2.4.2,循环控制语句,2,forin,循环,forin,循环用于遍历对象的属性或数组中的元素。语法格式如下:,for(expr in object),/,代码段,object,表示要遍历的集合。在循环开始前,当前数组的键名或对象的成员名将赋给变量,expr,。在每次循环中,数组的指针或对象的键名将移动到下一个单元,直到遍历完所有的单元。,例如,以下程序将遍历一个数组的所有元素。,var myArray:Array = ,一, ,二, ,三,;,for (var i:String in myArray),trace(myArray+i+,:, +myArrayi);,2.4.2,循环控制语句,3,for eachin,循环,for eachin,语句用于循环访问集合中的项,这些项可以是,XML,或,XMLList,对象中的标签,以及对象属性保存的值或数组元素。与,for.in,循环不同的是,,for each.in,循环中的迭代变量只包含属性所保存的值,而不包含属性的名称。例如:,var myObj:Object = a:2, y:3;,for each (var field:Int in myObj),trace(field);,2.4.2,循环控制语句,4,while,循环,while,循环表示只要满足条件,就会反复执行循环体,语法格式如下:,while(condition),/,代码段,其中,,condition,为判断的条件表达式。当表达式的值为,true,时就运行代码段中的语句,同时改变表达式的值。语句运行一遍后,再次检查表达式的值,如果为,true,则再次进入循环,直到值为,false,时就停止循环。如果表达式的值永远都是,true,,则循环将一直进行下去,成为死循环。如果表达式的值一开始就为,false,,则循环一次都不会运行。,2.4.2,循环控制语句,5,dowhile,循环,do.while,语句也是一种,while,循环语句。与,while,循环语句不同的是,,dowhile,循环首先执行循环内的代码,而不管,while,语句表达式的条件是否成立。程序执行一次后,,dowhile,循环才检查表达式中的值是否为,true,,值为,true,则继续循环,为,false,则停止循环。,例如,以下代码为,do.while,循环的一个简单示例,该示例在条件不满足时也会输出结果,如下所示:,var i:int = 10;,do,trace(i);,i+;, while (i 10);,/,输出,10,2.4.3,流程控制符,1,break,语句,break,语句可以结束当前,for,、,forin,、,for eachin,、,while,、,dowhile,或,switch,结构的执行。当程序执行到,break,控制符时,程序就立即结束当前循环。例如:,var i:int = 1;,while(i3),break;,/,当,i3,时结束,while,循环,trace(i);,/,输出,1,,,2,,,3,i+;,/I,加,1,2.4.3,流程控制符,2,continue,语句,continue,语句用于结束本次循环剩余的代码,并在条件值为,true,时开始执行下一次循环。例如:,var i:int ;,for(i=0;i10;i+),if(i = 5)continue ;,trace(i);,/,输出,012346789,2.4.4,应用实例:回答多项选择题,右击已经新建的,Flex,工程,选择“新建”菜单下的“,MXML,应用程序”子菜单项,新建一个文件。在设计模式下拖曳四个“,CheckBox,”控件。,id,分别设为,A,、,B,、,C,和,D,。标签文本设为:,Flex,、,Flash,、,ASP,、,Ajax,。再拖曳一个,Label,标签和一个,Button,控件,在编写,ActionScript,代码。程序的所有,代码所示,。,以上程序中定义了一个数组,selArr,,用于存放用户选择的复选框中的值。使用数组的,push,方法,将选中复选框中的,Label,的值添加到数组中。遍历数组,查看答案是否正确。运行结果如图所示。,2.5,函数,2.5.1,函数的定义,1,使用,function,关键字声明函数,函数语句以,function,关键字开头,语法格式如下:,function,函数名,(,参数,1:,类型,参数,2:,类型,参数,n:,类型,):,返回值类型,/,函数体,函数名可以是任何的,ActionScript,标识符,括号内定义函数的参数,参数之间使用逗号分隔。如果不带参数,则称为无参函数,但也必须包含括号“,(),”。函数体中定义在调用函数时执行的代码,这段代码可以包括变量、表达式和流程控制语句等,甚至可以是其他的函数或类定义。返回值类型指定了函数返回值的类型,返回值使用,return,语句返回。,2.5.1,函数的定义,2,使用匿名函数方式声明函数,匿名函数定义的方式是将一段“函数文本”存储在一个变量中,函数文本中没有名称,所以称为匿名函数。语法格式如下:,var,函数名,:Funtion = function(,参数,1:,类型,参数,2:,类型, ,参数,n:,类型,):,返回值类型,/,函数体,例如,使用匿名函数方式定义函数,customFunc,,代码如下所示:,var customFunc:Fuction=function(str:String):String,return Hello +str ;,2.5.2,函数的参数,1,参数传递,(,1,)按值传递,意味着将参数的值复制到局部变量中以便在函数内使用。,(,2,)按引用传递,意味着只传递对参数的引用,而不传递实际值。,例如:,var n:int=0;,function add(i:int):void,i+;,trace(n);,/,输出,0,add(n);,trace(n);,/,输出,0,下面是一个引用传递的例子:,var obj:Object=i:0;,function add(o:Object):void,o.i+;,trace(obj.i);,/,输出,0,add(obj);,trace(obj.i);,/,输出,1,2.5.2,函数的参数,2,默认参数值,指定为默认值的值必须是编译时的常量。如果某个参数存在默认值,则会有效地使该参数成为“可选参数”。没有默认值的参数被视为“必需的参数”。在定义参数时使用赋值运算符“,=,”即可为参数设置默认值。例如:,function print(i:int, j:int=2):void,trace(i, j);,print(1);,/,输出,12,2.5.2,函数的参数,3,arguments,对象,arguments,对象是一个数组,其中包括传递给函数的所有参数。例如,,arguments0,存储第,1,个参数,,arguments1,存储第,2,个参数。,属性作用是报告传递给函数的参数数量。,方法作用是提供对函数本身的引用,该引用可用于递归调用函数表达式。例如:,function print(i:int):void,trace(arguments0);,print(10);,/,输出,10,2.5.2,函数的参数,下面的例子是使用属性递归求自然数的阶乘:,var factorial:Function = function (x:uint):int,if(x = 0),return 1;,else,return (x * arguments.callee(x - 1);,trace(factorial(5);,/,输出,120,2.5.2,函数的参数,.(rest),参数可指定一个数组参数用于接受任意多个以逗号分隔的参数。只要定义了该参数,就可以接受任意多的参数。这些参数以数组的形式保存在,(rest),参数中,,rest,只是推荐使用的名称,也可以使用其他的名称,如,aps,。,(rest),参数声明必须是参数列表中的最后一个参数。,(rest),参数提供了与,arguments,数组和属性相同的功能,但是它不提供与类似的功能。例如:,function traceArr(x:int, .args):void,/,参数数组的名称设置为,args,for (var i:uint = 0; i args.length; i+),trace(argsi);,traceArr(1, 2, 3);,2.5.3,函数的作用域,函数的范围不仅决定了可以在程序中的什么位置调用函数,还决定了函数可以访问哪些定义。适用于变量标识符的作用域规则同样也适用于函数标识符。在全局作用域中声明的函数在整个代码中都可用。,2.5.4,函数的返回值,在声明函数时,如函数代码中使用,return,语句,则可以立即结束函数的运行,程序返回到调用该函数的下一条语句。例如:,function my_function(a:int=1):void,trace(a);,return;,/,结束函数的运行,下面的语句将不被运行,a+;,trace(a);,my_function();,/,输出,1,中断函数执行并不是,return,语句最常用的功能,许多函数通过使用,return,语句返回一个值与调用它们的代码进行交互。函数的返回值可以是任何类型的值,包括列表和对象。例如:,function squre(num:Number):Number,return num*num;,/,返回一个数的平方,trace(squre(4);,/,输出,16,2.5.5,函数的调用,函数在调用时需要提供有效的参数,在中调用函数的格式如下:,函数名,(,实参,1,实参,2,实参,n);,实参可以是常量、变量、其他构造类型数据或表达式,各个参数之间用逗号分隔。调用无参函数时不需要指定实参,实参的使用顺序必须与定义函数时的形参一致。例如:,function myfunc(a:int,b:int):void,trace(a+b);,var a:int=3;,myfunc(a,5);,/,输出,8,2.5.6,递归函数,一个函数在它的函数体中调用其自身则称这个函数为递归函数。在执行递归函数的调用过程中,函数将反复调用自身,每调用一次就进入新的一层调用。例如,计算一个数的阶乘,可以定义以下函数:,function factorial(n:Number):Number,if(n=0),return 1;,/,如果,n,为,0,则返回,1,else,return n*factorial(n-1);,/,递归调用,直到,n,等于,0,为止,trace(factorial(10);,/,输出,3628800,2.5.7,全局函数,1,判断函数,(,1,),isNaN(),函数,。用于,判断某个值是否为非数字。,(,2,),isFinite(),函数,。用于,判断某个数值是否为有限数。,(,3,),isXMLName(),函数,。用于,判断指定字符串对于,XML,元素或属性是否为有效名称。,2.5.7,全局函数,2,转换函数,(,1,),Boolean(),函数,。用于,将一个表达式转换为布尔值并返回该值。,(,2,),Number(),、,int(),和,uint(),函数,。用于,将一个给定数值分别转换成,Number,、,int,和,uint,类型的数值,并返回转换后的数值。,(,3,),String(),函数,。用于,将表达式转换成字符串形式,各种类型数据及转换后的结果如表,所示。,(,4,),Array(),函数、,Date(),函数和,Object(),函数,。,通常用于创建一个新数组。,Date(),函数用于返回当前星期值、日期值、时间和时区的字符串表示形式。,每个值都是一个对象,这意味着对某个值调用,Object(),函数后会返回该值,。,(,5,),XML(),和,XMLList(),函数,。分别,用于将表达式转换成,XML,对象和,XMLList,对象。,(,6,),parseFloat(),函数,。用于,将字符串转换为浮点数。此函数读取或分析并返回字符串中的数字,直到此函数遇到不是数字的字符。,(,7,),parseInt(),函数,。用于,将字符串转换成整数。如果指定的字符串不能转换成整数,则此函数返回,NaN,。以,0x,开头的字符串被解释为十六进制数字。,2.5.7,全局函数,3,转义操作函数,(,1,),escape(),和,unescape(),函数。,主要用于将参数转换为字符串,并以,URL,编码格式对其进行编码。在这种格式中,大多数非字母数字的字符都替换为十六进制序列。,(,2,),encodeURI(),和,decodeURI(),函数。,encodeURI(),函数将字符串编码为有效的,URI,(统一资源标识符)。,decodeURI(),函数则将已编码的,URI,解码为字符串。,(,3,),encodeURIComponent(),和,decodeURIComponent(),函数。,encodeURIComponent(),函数将字符串编码为有效的,URI,组件。,encodeURIComponent(),函数与,encodeURI(),函数不同,它仅适用于,URI,字符串的一部分(称为,URI,组件)。,URI,组件是指出现在某些特殊字符之间的任何文本,这些特殊字符称为组件分隔符(如,:,、,/,、,;,、,?,)。,dncodeURIComponent(),函数则用于将已编码的,URI,组件解码为字符串。,2.5.8,应用实例:设计一个计算器程序,新建一个,MXML,应用程序命名为。在设计模式中为应用程序设计界面。拖曳一个,Panel,容器,在容器中设置三个,TextInput,文本框控件,一个,DropDownList,下拉框控件,一个按钮控件,以及一个,Label,控件。设计出的效果如图所示。,2.5.8,应用实例:设计一个计算器程序,将,标签的,createComplete,事件设置为,init(),,在初始化文件时运行该函数。将,标签的,click,事件设为,do_btn(),,在单击该按钮时运行函数。界面完成后的代码如下所示:,2.5.8,应用实例:设计一个计算器程序,在,和,标签之间插入,ActionScript,代码,定义,init(),初始化函数,在下拉框控件中初始化“,+,”、“,-,”、“,*,”和“,/,”。定义,cac,函数,参数为用户输入的两个数和选择的计算选项,返回两个数计算的结果。定义,do_btn(),函数,得到用户输入的数值,调用,cac,函数得到计算结果,并将结果在“结果”文本框中显示。,代码所示,。,程序的运行结果如图所示。,2.6,面向对象编程,2.6.1,面向对象程序设计基本概念,1,封装,封装是将数据和代码捆绑到一起,避免外界的干扰和不确定性。,2,继承,类提供了创建新类的方法,再借助继承这一重要机制扩充了类的定义,实现了面向对象的优越性。,3,多态,不同的类对于不同的操作具有不同的行为称为多态,。,2.6.2,类的定义,类的一般定义形式如下所示:,class,类名,/,声明属性,/,声明方法,例如,以下是一个简单的类定义:,public class MyClass,/,属性,public var i:int=5;,/,方法,public function add():void,trace(,类的方法,);,2.6.3,类的实例化和访问,例如,要创建之前定义的,MyClass,类的一个实例,可以使用如下语句:,在对象被创建之后,可以在程序中对该对象的属性和方法进行访问。访问的方法是在对象后面使用点运算符(,.,)加上要访问的属性和方法。例如,已创建了对象“,obj,”,类中已有属性“,stunumber,”,要访问该属性可以使用“”。,2.6.3,类的实例化和访问,例如,访问,MyClass,类的属性和方法如下所示:,2.6.4,类的访问控制,的访问修饰符有,internal,、,public,、,private,和,protected,四种。,(,1,),internal,:表示在同一类内都可以访问。,(,2,),public,:声明为公用的属性和方法。,(,3,),private,:声明为私有的属性和方法。,(,4,),protected,:声明为被保护的属性和方法。,2.6.4,类的访问控制,例如,定义一个学生类,Student,如下所示:,public class Student,private var num:String= 101101;,public var name:String= ,王林,;,public function Stuinfo():void,trace(,学生信息,);,在,Flex,应用程序中访问该类如下所示:,var stu:Student = new Student();,trace(stu.name);,stu.Stuinfo();,trace(stu.num);,/,本语句出错,访问权限不够,2.6.5,静态属性和方法,定义静态属性和方法时,static关键字应该加在访问修饰符之后,例如:,public class Student,public static var name:String= 王林;,static function showname(),name= 张强;,trace(name);,2.6.6,构造函数和析构函数,1,构造函数,构造函数定义时,名称一定要与类名相同。构造函数的定义形式如下所示:,public function,类名,(),2.6.6,构造函数和析构函数,构造函数只能使用,public,进行访问控制,无返回值,不能声明返回类型。例如:,public class Student,private var num:String;,private var name:String;,/,构造函数,public function Student(),trace(,执行构造函数,);,num=101101;,name=,王林,;,public function showstu():void,trace(num);,trace(name);,2.6.6,构造函数和析构函数,创建类的实例并访问成员数据如下:,var stu:Student=new Student();,stu.showstu();,输出结果如下:,执行构造函数,101101,王林,2.6.6,构造函数和析构函数,2,析构函数,析构函数是在类的对象被销毁时自动执行的,主要用于释放对象占用的内存空间。析构函数的名称也与类型相同,只不过要在函数名前加一个“,”符号。语法格式如下:,public function ,类名,(),析构函数不带任何参数,也没有返回值。一个类中只能有一个析构函数。,2.6.7 getter,和,setter,方法,1,getter,方法,getter,方法用于访问属性的值,一般使用,get,关键字定义,getter,方法,语法格式如下:,访问修饰符,function get,方法名,():,返回类型,/,其他代码,return,属性名,;,getter,方法不需要定义参数,返回类型要和私有属性的类型相同。方法的定义中必须要有一个,return,语句用于返回要访问的属性。在类外部使用对象名加点运算符(,.,)加方法名即可得到类的属性值。,2.6.7 getter,和,setter,方法,2,setter,方法,setter,方法用于设置属性的值,一般使用,set,关键字定义,语法格式如下:,访问修饰符,function set,方法名,(,参数名,:,参数类型,):void,/,其他代码,属性名,=,参数名,;,setter,方法中必须要有参数,参数类型要和访问的属性类型相同,返回类型为,void,,方法中必须要有给属性赋值的赋值语句。在类外部使用,setter,方法为属性赋值,格式如下:,类名,.,方法名,=,属性值,;,2.6.8,类的继承,可以使用,extends,关键字指明类与类之间的继承关系,定义子类的语法格式如下:,public class,子类名,extends,父类名,/,声明子类的属性和方法,创建的子类包括父类成员和其新增加的成员如下所示。,新建包,com,中的文件,定义父类,A,如下所示:,package com,public class A,public var a_str1:String;,private var a_str2:String=string2;,protected var a_str3:String=string3;,public function a_fun():void,a_str1= string1;,2.6.8,类的继承,定义子类,B,,继承于父类,A,如下所示:,package com,import com.A;,public class B extends A,public var b_str:String;,public function b_fun():void,a_fun();,/,子类访问父类的方法,trace(a_str1);,/,子类中访问父类的,public,属性,a_str3=str3;,/,子类中访问父类的,protected,属性,trace(a_str3);,创建,B,的实例如下所示:,var b:B=new B();,/,创建对象,$b,b.a_fun();,/,调用,A,类的,a_fun(),方法,trace(b.a_str1);,/,输出,string1,b.b_
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!