AS30语言基础.docx
- 文档编号:7226231
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:49
- 大小:48.83KB
AS30语言基础.docx
《AS30语言基础.docx》由会员分享,可在线阅读,更多相关《AS30语言基础.docx(49页珍藏版)》请在冰豆网上搜索。
AS30语言基础
AS3.0语言基础
================================================
第2章ActionScript3语言基本元素
================================================
2.1.2数据类型概述
简单数据类型
Boolean(布尔)、int(有符整型)、Number(浮点)、String(字符串)、uint(无符整型)
复杂数据类型
Array(数组)、Date(日期)、Error(异常)、Function(函数)、RegExp(正则表达)、XML、XMLList
2.2.1变量声明
var变量:
类型
var变量:
类型=值;
2.3声明常量
const常量名:
类型=值;
2.4基础数据类型
1.布尔值Boolean(初始化为false)
2.数字:
intuintNumber
int有符号32位整数-2(31次方)-+(2(31次方)-1)
uint无符号32位整数0-2(32次方)-1
Number64位浮点
能用整数优先用intuint,有正负之分,用int。
只处理整数,用uint,有小数,用Number。
2.4.6Object及关联数组
var对象:
Object=newObject()
var对象:
Object={};
2.4.8Null、NaN、undefined及各自应用对象:
变量的默认值
数据类型默认值
int0
uint0
NumberNaN
Stringnull
Booleanfalse
Arraynull
Objectnull
没声明undefined
*undefined
注意:
必须声明初值,否则容易出错。
2.5运算符,表达式及运用
2.5.11typeof、is、as
typeof,用字符串返回对象类型,格式:
typeof(对象)
is,判断操作符左边的对象是否属于右边的类型,返回值为Boolean,格式:
对象is数据类型
as,判断操作符左边的对象是否属于右边的类型,属于则返回数据,不属于则返回null,格式:
对象as数据类型
typeof对象类型与返回结果对照表
对象类型返回结果
Arrayobject
Booleanboolean
Functionfunction
intnumber
Numbernumber
Objectobject
Stringstring
uintnumber
XMLxml
XMLListxml
2.5.12in
in,判断操作符左边的对象是否作为右边对象中的键(Key)或索引,返回值为Boolean
比如:
vara:
Array=["q","w","e"];
trace(2ina);//数组中有索引2,返回true
trace(3ina);//数组中没有索引3,返回false
2.5.13delete关键字
AS2.0中可以删除任意任意对象的delete关键字,在AS3.0中只能用于删除对象的动态实例属性,非动态属性不能删除。
如果要将一个属性所持有的引用删除,使用对象名=null来进行赋值操作即可。
================================================
第3章ActionScript3流程控制
================================================
3.4.5for...in和foreach...in
for(var枚举变量in枚举集合)//枚举变量返回为集合元素键名
foreach(var枚举变量in枚举集合)//枚举变量返回为集合元素值
3.4.7break和continue标签的特殊用法
在循环语句前用标签:
的形式为循环体赋标签,然后就可以在break和continue语句后加上空格+这个标签,实现控制对应循环的功能。
3.5AS3.0中switch比较默认使用===全等比较,switch条件不会自动执行类型转换,要注意。
================================================
第4章ActionScript3中的函数及高级使用技巧
================================================
4.1.1两种定义函数的方法
函数定义式-函数变量式
函数语句定义法-函数表达式定义法
函数定义式用function开头,function函数名(){}
函数变量式用var变量名=function(){},即匿名函数
AS编译器会优先执行定义式的函数,而变量式函数则只能先定义,后使用(与变量一样,先定义,后使用)
变量式中this关键字绑定对象定义式中this关键字只绑定场景
varnum:
int=3;
functiontestThisA(){
trace(this.num)
//此处输出3
}
vartestThisB:
Function=function(){
trace(this.num)
//此处输出300
}
varObj:
Object={num:
300};
Obj.TestA=testThisA
Obj.TestB=testThisB
4.2参数
4.2.1按引用传入参数
AS3.0中,所有形参均为引用传入方式,只不过,基元数据是不变对象,所以与传值方式效果一样。
4.2.2函数默认参数
function函数名(形参:
类型=默认值)
4.2.3形式参数数组
函数中默认自动生成的arguments对象中保存有所有定义中的形参参数
AS2.0中的arguments数组形参对象,存放所有传入的不定个数的形参参数。
而在AS3.0中,argument则被严格限定存放形参定义中所定义个数的形参。
arguments对象有一个length属性和一个callee方法。
function函数名(形参:
数据类型,形参:
数据类型){
trace(arguments.length)
arguments.callee
//调用函数本体,一般用于创建递归
}
如果需要传入任意多个参数,则使用AS3.0中的rest关键字,即...
特殊关键字...(rest)
function函数名(...参数名){
//参数名可随意定义
trace(参数名.length)
}
最后要注意的,arguments与...rest关键字不能混用,使用了...rest则arguments则不能再使用
┏━━━━━━━━━━━━━━━━━━━━┓
┃ 第二部分:
ActionScript3面向对象编程┃
┗━━━━━━━━━━━━━━━━━━━━┛
================================================
第5章类和对象━━从定义到原理
================================================
5.1基本类结构
基本结构:
HelloWorld
package
{
publicclassHello
{
publicvarhelloString:
String='World';
publicfunctionHello(){
}
publicfunctionsayHello():
void{
trace("Hello");
}
}
}
ActionScript3中的类如果想被外部访问,必须放在package(包)中
构造函数与类名相同,为与其它类内函数区分,一般首字母大写。
5.2Class(类)和Object(对象)
类是对象结构的描述。
5.3Class的成员
ActionScript3中的Class(类)的构成
·Class的名称和包路径
·构造函数
·属性:
包括实例属性和静态静态属性
·方法:
包括实例方法和静态方法
AS3中对类的默认访问控制是internal(包内可见),而非AS2.0中的public
5.4Class和object的创建和使用
5.4.1创建Class
参看5.1基本类结构
5.4.2创建类的实例
import包路径.类名
///////////////////////////////////////////////////////////相同包下,不用import类名,可直接引用
var对象=new类()
var对象:
类=new类()//推荐
new关键字后跟的其实不是类名,而是类的构造函数
5.5Class和package(包)
package格式:
package项目根.包路径
比如:
packagecom.kinda.book.display
类名统一用大写字母开头,包路径统一用小写
类体结构安排:
package[包名]{
import类包;
publicclass类
{
//private静态属性
//private静态方法
//private实例属性
//构造函数
//实例方法
//静属静方实属构函实方,声明类内数据的五个顺序
publicfunction构造函数(){
//函数代码
}
}
}
5.6实例属性和实例方法
实例属性和实例方法类似于动态网页语言中的session,不同的类实例(对象)中的实例属性可以有不同值。
5.6.1实例属性
访问控制符var属性名:
数据类型;
访问控制符var属性名:
数据类型=值;
访问控制符可以是internalpublicprivateprotect或者自定义的namespace标识
默认为internal-包内成员可以访问,包外不可访问
5.6.2实例方法
访问控制符function方法名(形参):
返回值类型{
//方法内容
}
5.6.3访问实例属性和实例方法
使用new语法实例化对象后,
对象.属性|方法名
也可以使用
对象["属性名"]
对象["方法名"]()
来访问对象的属性和方法,同时也可以动态组合属性或方法,动态访问
5.7静态属性和静态方法
静态属性和静态方法类似于动态网页语言中的Application,不同的类实例(对象)间共享类中共同的属性和方法。
声明静态属性:
staticvar属性:
数据类型;
staticvar属性:
数据类型=值;
publicstaticvar属性:
数据类型;
publicstaticvar属性:
数据类型=值;
不加访问控制符时,默认同样是internal
如果要声明静态常量,需要配合使用static和const
staticconst属性:
数据类型=值;
静态方法:
同样是使用static关键字
访问控制符staticfunction方法名(形参):
返回值类型{
//方法内容
}
5.7.3访问静态属性和静态方法
类名.属性
类名.方法
例:
Math.floor
Math.PI
为了避免与类内成员变量冲突,访问静态属性及方法时,即使在类体内访问也最好用类名.属性这样的格式来写
5.7.4应用1:
使用静态属性集中管理数据
publicstaticconstPI:
Number=3.141592653589793;
比如事件定义,一般都是使用静态属性的,那我们使用中文来定义属性,就可以在代码中使用中文事件了
比如:
publicstaticconst播放:
String="play";
使用事件时就可以用对象.播放来实现代码的中文化了
5.7.5应用2:
使用静态属性部分实现Enumeration(枚举)[略]
5.7.6应用3:
实现工具类
如:
MathString等类
5.8构造函数
定义:
构造函数用于创建对象时供系统自动调用的函数,实现数据的初始化操作
格式:
public类名(形参){
//构造函数名与类名相同,首字母大写,以与其它函数等区分
//形参中同样可以使用...rest运算符载入不同个数的参数,实现类似重载的功能
}
5.8.3构造函数的返回类型
构造函数只能返回undefined值,所以return没意义。
但return可以影响构造函数向下执行代码的顺序,遇到return时,其下的代码将终止执行。
5.9Clas的种类:
动态类和密封类
密封类在运行时不能动态添加属性或方法。
动态类在运行时可以动态添加属性或方法。
默认声明的类为静态类,动态类在class关键字前有dynamic关键字
注意:
AS3.0中的for...in循环,foreach...in循环只能遍历动态类对象的动态属性
5.10this关键字[略]
5.11ActionScript3中的方法重载
public类名(...rest):
*{
//根据传入的函数个数进行处理
//不支持不同类型参数的区分作为重载的标准
}
5.12含有多个类的ActionScript3类文件的标准例子
(1)每个AS3的Class都必须写个一个和类同句的.as文件中
(2)package包体括号内只能定义一个Class
(3)在package包体中定义的Class,必须与类文件名相同
(4)在package包体括号外还可以定义其它类,这种类,叫包外类,只能被当前as文件中的成员类访问
========================================================
第6章ActionScript3中的封装:
类的成员、类、包与访问控制
========================================================
公认OOP的三大要素为:
封装、继承、多态
6.1什么是封装[概括]
封装(encapsulation),又叫隐藏实现(hidingtheimplementation),具体的意思是将实现的细节隐藏起来,只将必要的功能接口对外公开。
打个比喻就是汽车,用户只需要知道踏油门就会加油,打方向盘就会转向,至于汽车内部的实现细节,用户不用知道,而这些细节,就是属于封装了。
在ActionScript3.0中,使用访问控制说明符来控制代码的可见度。
访问控制说明符从“毫无限制”到“严格限制”的顺序是:
public完全公开
protected在private的基础上,允许子类访问
internal包内可见
private类内可见
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 引用原话:
┃
┃┃
┃一个好的OOP程序,就像人开汽车那样,对象和对象之间的交流只限于公开的接口。
┃
┃好的OOP程序,没有流程执行先后的概念,只有代码单元之间如何相互交流和协同工作┃
┃的模式。
这些代码单元,又被称为模块。
模块在代码中的表现形式是一个单独的类或┃
┃多个类。
这些类共同协作,提供一种或多种服务。
那么如何让一部分接口暴露呢?
┃
┃如何隐藏不对外公开的方法呢?
使用访问控制说明符,这是实现封装的一个重要方法。
┃
┃ActionScript3使用访问控制说明符来告知外部使用者,本代码单元有哪些成员可以被┃
┃外部访问到,哪些不能被访问到。
将访问控制符从“毫无限制”到“严格限制”┃
┃排一下序:
public、protected、internal和private。
这些访问控制符,清楚明白地┃
┃描述了每个部分的访问权限。
一个优秀的OOP程序,会尽可能将单个代码单元的细节隐┃
┃藏起来。
换句话说,就是尽可能不要对外公开代码单元的成员。
顺便说一句,不少OOP┃
┃程序员最喜爱private关键字,因为这意味着最大的修改自由。
很有意思,在OOP编程中,┃
┃你对代码单元访问控制得越严格,日后你对代码修改的自由越大。
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
6.2为什么需要封装
6.2.1封装使修改代码更加容易和安全
封装使程序员在后期修改代码或在应用第三方代码的时候,可以在前期严格的访问控制定义下,令到改代码的时候,可以有的放矢地改,而不用担心因为改变部分代码而有可能令到程序的其它部分产生其它新问题.
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 引用原话:
┃
┃┃
┃封装使修改代码更加容易和安全.开发RIA软件,和所有其它语言开发软件一样,┃
┃会经常调度和修改代码.一般说来,软件的修改和调度时间可能会与开发时间相等,┃
┃甚至更长.因此,程序开发者所写的代码要经得起不断的修改.尤其是当编写的代码要┃
┃提供给第三方使用时,更要小心你所做的修改,确保你的修改不会危害其它代码的稳健性.┃
┃┃
┃如何确保稳定性?
每个类有那么多的属性、方法,你如何知道其它程序员使用了哪些┃
┃成员不知道就无从修改!
如果有个标识,标识哪些是第三方可以访问的,哪些是他们不能┃
┃访问和修改的就好了。
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
6.2.2封装让代码分成一个个相对独立的单元
只要保持对外的接口不变,那么内部的代码结构可以任意改动,保证了代码单元的修改和替换更加安全,软件维护和修改都能有的放矢。
6.2.3封装让整个软件开发的复杂度大大降低
模块化,降低复杂度才是封装这个思想产生的最真实的原因,代码易于修改、替换、复用等只是这一点附带的好处而已。
6.3ActionScript3中封装的几个层次
包外->包->类->包外类(由外层到内层的结构,越靠近内近,访问权限越严格)
包外:
相当于公共权限,任意第三方都可以访问到其中的代码单元。
包(package):
包内的成员互相可以访问,但包内的成员不能被包外的成员访问到。
类(class):
一个包中可以包含很多个类,在类的内部,类的成员可以相互访问,但外部是没有办法访问到类的私有成员的。
包外类:
这是最底层的类,在package语句外定义,只能被当前类中的成员访问,类似只能被当前类调用的私有函数。
6.4package(包)
package用于划分访问控制和实现模块化功能。
6.4.1包的导入(import)
使用任何一个类之前,必须先导入这个类所在的包,即使使用全饰路径,也必须先导入包。
在FlashCS3文档时间轴上写代码时,flash.*默认是自动导入的,可不用手动import
1.导入单个类
import包路径;
2.使用通配符导入整个包
使用*号可以快速导入指定包的所有类,但一般为了程序的清晰,建议少用,而是直接写清楚导入类的包名
import包路径.*;
3.使用同一个包内的类文件无须导入
如果导入的不同包中有同名的类,则需要在声明使用时使用全饰路径,即:
new完整包路径.类名();
6.4.3package的创建和命名
业界习惯是使用域名来定义包路径
比如com.kinda.book.display
如果没有,也可以使用自己的电子邮箱
比如com.21cn.kinda.book.display
在项目工程目录下建立com文件夹,在com文件夹建kinda文件夹,在kinda文件夹内建book文件夹
使用系统目录形式来实现包的管理
创建包的过程:
1.选好包名,一般以域名段倒写为前缀;
2.在硬盘上根据定好的包名结构创建对应的目录结构
3.在包中创建的任何类,头部package定义中必须写上包路径
修改包结构的时候有三点要做:
1.移动包目录
2.修改包中类头部package中的包名
3.修改相应import类中的包名
6.5.1类路径
Ctrl+U>ActionScript>ActionScript3Settings...
在此可添加系统类包路径,供全局调用。
6.6类成员的访问控制
AS3中有四种访问控制符:
public
private
internal
protected
访问控制符不仅控制实例属性和方法,对静态属性和方法也有同样的作用。
6.6.1internal:
包内访问
AS3中所有类成员在没加访问控制符的情况下,都为默认的internal权限,
可以被同一个包内的其它类成员访问
6.6.2public:
完全公开
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 引用原话:
┃
┃┃
┃在些要提醒的是,public的类成员应当看成是这个类对外部做出的承诺、协议,┃
┃一旦决定,日后不能轻易改动。
不能仅仅为了其他类可以访问某个成员,而轻率地将该成员设┃
┃为public。
这是OOP新手极容易犯的错误。
┃
┃一旦发现某个类成员需要频繁被外部访问,就要先考虑这个类成员的设计是否不当,┃
┃可否独立出来;再考虑可否归入那些需要频繁访问的包中,使用internal级别来实现;最后再┃
┃考虑使用public的访问控制。
┃
┃总之,尽量将类成员的访问权限控制到最低限度,这才能给日后的修改、维护代码带来┃
┃最大的自由。
┃
┃┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
6.6.3private:
仅当前类可访问
private修饰的类的成员,称为私有成员(privatemember),除了类体内可以访问外,包内的其它类和继承的子类等都不能访问私有成员。
对于复杂数据类型(比如数组等)的属性来说,private只能限制通过当前类的实例来访问,但不能限制这个属性所指向的引用对象本身的访问。
6.6.4protected:
子类可访问
protected修饰的对象只能被当前类和当前类的子类对象访问,等同在private基础上增加对子类的支持。
protected修饰的子类不受包的限制,可以在不同类中,如果不是当前类子类,那和private是一样的。
6.7getter和setter方法
getter和setter方法是存取器方法
getter方法:
访问控制符functionget访问属性名():
返回类型{
其它代码
return要访问的私有属性;
}
setter方法:
访问控制符functionset访问属性名():
返回类型{
其它代码
要访问的私有属性=参数;
}
概括:
封装的意义就是不想用户直接访问类内的数据,而使用getter和setter则是一种折衷的办法,当用户需要设置对象属性的时候
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AS30 语言 基础