actionScript30笔记.docx
《actionScript30笔记.docx》由会员分享,可在线阅读,更多相关《actionScript30笔记.docx(56页珍藏版)》请在冰豆网上搜索。
actionScript30笔记
/*============
============*/:
以全角星号包围的为本次更新的内容
┏━━━━━━━━━━━━━━━━━━┓
┃ 第一部分:
ActionScript3语言基础┃
┗━━━━━━━━━━━━━━━━━━┛
================================================
第2章ActionScript3语言基本元素
================================================
2.1.2数据类型概述
简单数据类型
Boolean(布尔)、int(有符整型)、Number(浮点)、String(字符串)、uint(无符整型)
复杂数据类型
Array(数组)、Date(日期)、Error(异常)、Function(函数)、RegExp(正则表达)、XML、XMLList
2.2.1变量声明
var变量:
类型
var变量:
类型=值;
/*============
2.2.5基元数据类型的深入讨论*
(此星号为殿堂本身章节标示意为本章属高级内容难度较深建议有经验的人阅读理解)
AS3中数据类型可以划分为两种,一种是值类型组成的不变对象(immutableobject),一种是数组Object类型的引用类型!
所谓的不变对象意思就是忠于地址,而不是忠于引用对象!
vara:
uint=1;
varb:
uint=0;
b=a;//这里把b的值向到a所指向的内存地址;
a=2;//这里不是修改a原来的内存了而是生成一个副本重新赋值为2并把a指向新内存地址
trace(a);
trace(b);
//直接赋值只会改变地址引用,而后续的对象更改,都是生成新的副本,而非在原有地址上进行数据的修改!
!
//个人理解就是类似有一个连接池,里面放有很多个变量的副本,声明变量bcdef指向等于a的时候,它们共同引用的是一个相同的字符串指向变量a的地址,减少副本的冗余带来的内存重复占用这里bcdef只是一个指代当程序中重复利用一个相同的字符串超过成千上万次的时候,这里只引用一次,效果就特别明显了!
!
//而当一个内存地址均不被任何变量引用时
//比如
vara:
uint=1;
a=2;
//类似这种单赋值的话,回收计数器引用为0时,内存回收机制会在适当的时候回收原来赋值1时占用的内存空间!
!
//谢谢天地会群里的朋友补充,类似java中的对象池,创建的对象循环利用,不采用销毁/new的方法,而多采用init初始化,重复利用!
(方便帮助理解这里举了点不一定符合实际的例子但大致是这样的思想!
)
============*/
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.5数组:
Array
AS3中的数组是以0为起始索引的稀疏数组(sparsearray),
与C#等语言不同,它们变量及数组声明是typename形式的类型化序列!
比如intIntArray[10],声明了一个只能放整数的数组里面有10位长度
AS3中的数组每位元素没严格要求相同类型,但一般情况下我们使用时均同一时刻只存放相同类型的数据!
===========*/
2.4.6Object及关联数组
var对象:
Object=newObject()
var对象:
Object={};
对象(Object)属动态类,可动态添加任意属性/方法,特别在传参时可以运用Object进行封箱/拆箱处理!
var对象:
Object={键:
值,键:
值,键:
值};
对象.键=值;
当键名中包含空格等特殊字符串时,需要使用[]数组运算符的方式进行访问
对象["键"]=值;
关于Object的定义可以有几种说法,分别是对象(专指Object的定义)/关联数组/匿名对象/对象文本(即单纯使用{}声明的匿名对象)
/*===========
2.4.7多维数组
AS3中多维数组的实现使用
数组元素嵌套数组元件的方法实现多维数组的效用,即:
varArr:
Array=[[0,1],[1,3],[4,6]]
这种形式的多维数组
===========*/
2.4.8Null、NaN、undefined及各自应用对象:
变量的默认值
数据类型默认值
int0
uint0
NumberNaN
Stringnull
Booleanfalse
Arraynull
Objectnull
没声明undefined
*undefined
/*============
除了真正未声明及*类型会显示为undefined外
数值类初始值为0
StringObjectArray类初始值为null
Boolean初始值为false
Number初始值为NaN(NotaNumber)
这里科普一下关于NaN的原理,属于数据结构基础的部分,计算机储存二进制的原理知识:
因为计算机存放浮点数时是采用类似4字节byte(4*8=32位)储存一个实数时,
会以3byte存放使用标准化指数(即科学记数法的个位数为0表示的小数)表示的底数,包括底数的正负号
1byte存放指数,包括正负号
二进制概念中1字节(byte)有8位(bit)底数部分1bit指定正负23bit(即3字节3*8-1=23)储存底数(2的23次方)
指数部分1bit指定正负7bit储存指数
因为实数初始化时计算机并不清楚最终它是储存整数还是浮点数?
3byte+1byte浮点数或者直接4byte的整数1bit+31bit(2的31次方),所以才会有了NaN这个概念,Number类型数据初始化时是不定值!
要判别一个Number类型变量是否为NaN,不能直接用==NaN,要视它为一个布尔量来运算,即:
if(!
Number变量)
因为NaN等同null,布尔值上为false,!
非一次即true
==========*/
注意:
必须声明初值,否则容易出错。
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
ArrayObject一视同仁为object
数值类一视同仁为number
Booleand>boolean
String>string
Function>function
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枚举集合)//枚举变量返回为集合元素值
for...in和foreach均只能遍历动态类的集合
3.4.7break和continue标签的特殊用法
在循环语句前用标签:
的形式为循环体赋标签,然后就可以在break和continue语句后加上空格+这个标签,实现控制对应循环的功能。
3.5AS3.0中switch比较默认使用===全等比较,switch条件不会自动执行类型转换,要注意。
================================================
第4章ActionScript3中的函数及高级使用技巧
================================================
4.1.1两种定义函数的方法
函数定义式-函数变量式
函数语句定义法-函数表达式定义法
函数定义式用function开头,function函数名(){}
函数变量式用var变量名=function(){},即匿名函数
AS编译器会优先执行定义式的函数,而变量式函数则只能先定义,后使用(与变量一样,先定义,后使用)
在实现上,使用函数定义式定义的函数,AS3是使用内部实现处理的,而函数语句定义法则是基于动态类的实现,所以函数声明不可以用赋值等号改变指向,而变量式函数定义可以使用赋值等号改变它的引用!
!
vara:
Function=function(){};
a=bFunction;//重新指向函数引用对象
变量式中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(枚举)
final声明类不可继承,static声明常量不可改写
5.7.6应用3:
实现工具类
如:
MathString等类
5.8构造函数
定义:
构造函数用于创建对象时供系统自动调用的函数,实现数据的初始化操作
格式:
public类名(形参){
//构造函数名与类名相同,首字母大写,以与其它函数等区分
//形参中同样可以使用...rest运算符载入不同个数的参数,实现类似重载的功能
}
/*==========
5.8.2
AS3中规定构造函数的访问权限只能是public,这意味着as3中默认不支持构造函数私有化的操作!
==========*/
5.8.3构造函数的返回类型
构造函数只能返回undefined值,所以return没意义。
但return可以影响构造函数向下执行代码的顺序,遇到return时,其下的代码将终止执行。
return在函数中本来就是类似VB中的exit...FunctionExit...Sub的作用,强制结束函数执行流程!
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软件,和所有其它语言开发软件一样,