┏━━━━━━━━━━━━━━━━━━┓
┃ 第一部分:ActionScript 3 语言基础 ┃
┗━━━━━━━━━━━━━━━━━━┛
================================================
第2章 ActionScript 3 语言基本元素
================================================
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.数字:int uint Number
int 有符号32位整数 -2(31次方) - +(2(31次方)-1)
uint 无符号32位整数 0 - 2(32次方)-1
Number 64位浮点
能用整数优先用int uint,有正负之分,用int。只处理整数,用uint,有小数,用Number。
2.4.6 Object及关联数组
var 对象:Object = new Object()
var 对象:Object = {};
2.4.8
Null、NaN、undefined及各自应用对象:变量的默认值
数据类型 默认值
int 0
uint 0
Number NaN
String null
Boolean false
Array null
Object null
没声明 undefined
* undefined
注意:必须声明初值,否则容易出错。
2.5 运算符,表达式及运用
2.5.11 typeof、is、as
typeof,用字符串返回对象类型,格式: typeof(对象)
is ,判断操作符左边的对象是否属于右边的类型,返回值为Boolean,格式: 对象 is 数据类型
as ,判断操作符左边的对象是否属于右边的类型,属于则返回数据,不属于则返回null,格式: 对象 as 数据类型
typeof对象类型与返回结果对照表
对象类型 返回结果
Array object
Boolean boolean
Function function
int number
Number number
Object object
String string
uint number
XML xml
XMLList xml
2.5.12 in
in ,判断操作符左边的对象是否作为右边对象中的键(Key)或索引,返回值为Boolean
比如:
var a:Array = ["q","w","e"];
trace(2 in a); //数组中有索引2,返回true
trace(3 in a); //数组中没有索引3,返回false
2.5.13 delete关键字
AS2.0中可以删除任意任意对象的delete关键字,在AS3.0中只能用于删除对象的动态实例属性,非动态属性不能删除。
如果要将一个对象删除,使用 对象名 = null 来进行赋值操作即可。
================================================
第3章 ActionScript 3 流程控制
================================================
3.4.5 for...in和for each...in
for(var 枚举变量 in 枚举集合) //枚举变量返回为集合元素键名
for each(var 枚举变量 in 枚举集合) //枚举变量返回为集合元素值
3.4.7 break和continue标签的特殊用法
在循环语句前用 标签: 的形式为循环体赋标签,然后就可以在break和continue语句后 加上空格+这个标签,实现控制对应循环的功能。
3.5 AS3.0中switch比较默认使用 === 全等比较,switch条件不会自动执行类型转换,要注意。
================================================
第4章 ActionScript 3 中的函数及高级使用技巧
================================================
4.1.1 两种定义函数的方法
函数定义式 - 函数变量式
函数语句定义法 - 函数表达式定义法
函数定义式 用function开头,function 函数名(){}
函数变量式 用 var 变量名 = function(){} ,即匿名函数
AS编译器会优先执行定义式的函数,而变量式函数则只能先定义,后使用(与变量一样,先定义,后使用)
变量式中this关键字绑定对象 定义式中this关键字只绑定场景
var num:int = 3;
function testThisA(){
trace(this.num)
//此处输出3
}
var testThisB:Function = function(){
trace(this.num)
//此处输出300
}
var Obj: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则不能再使用
┏━━━━━━━━━━━━━━━━━━━━┓
┃ 第二部分:ActionScript 3 面向对象编程 ┃
┗━━━━━━━━━━━━━━━━━━━━┛
================================================
第5章 类和对象 ━━ 从定义到原理
================================================
5.1 基本类结构
基本结构:HelloWorld
package
{
public class Hello
{
public var helloString:String = 'World';
public function Hello(){
}
public function sayHello():void{
trace("Hello");
}
}
}
ActionScript3中的类如果想被外部访问,必须放在package(包)中
构造函数与类名相同,为与其它类内函数区分,一般首字母大写。
5.2 Class(类)和Object(对象)
类是对象结构的描述。
5.3 Class的成员
ActionScript3中的Class(类)的构成
·Class的名称和包路径
·构造函数
·属性:包括实例属性和表态静态属性
·方法:包括实例方法和静态方法
AS3中对类的默认访问控制是internal(包内可见),而非AS2.0中的public
5.4 Class和object的创建和使用
5.4.1 创建Class
参看5.1 基本类结构
5.4.2 创建类的实例
import 包路径.类名
///相同包下,不用import类名,可直接引用
var 对象 = new 类()
var 对象:类 = new 类() //推荐
new 关键字后跟的其实不是类名,而是类的构造函数
5.5 Class和package(包)
package格式:
package 项目根.包路径
比如:
package com.kinda.book.display
类名统一用大写字母开头,包路径统一用小写
类体结构安排:
package [包名]{
import 类包;
public class 类
{
//private 静态属性
//private 静态方法
//private 实例属性
//构造函数
//实例方法
//静属 静方 实属 构函 实方,声明类内数据的五个顺序
public function 构造函数(){
//函数代码
}
}
}
5.6 实例属性和实例方法
实例属性和实例方法类似于动态网页语言中的session,不同的类实例(对象)中的实例属性可以有不同值 。
5.6.1 实例属性
访问控制符 var 属性名:数据类型;
访问控制符 var 属性名:数据类型 = 值;
访问控制符可以是 internal public private protect 或者自定义的namespace标识
默认为internal - 包内成员可以访问,包外不可访问
5.6.2 实例方法
访问控制符 function 方法名(形参):返回值类型{
//方法内容
}
5.6.3 访问实例属性和实例方法
使用new 语法实例化对象后,
对象.属性|方法名
5.7 静态属性和静态方法
静态属性和静态方法类似于动态网页语言中的Application,不同的类实例(对象)间共享类中共同的属性和方法。
声明静态属性:
static var 属性:数据类型;
static var 属性:数据类型 = 值;
public static var 属性:数据类型;
public static var 属性:数据类型 = 值;
不加访问控制符时,默认同样是internal
如果要声明静态常量,需要配合使用 static 和 const
static const 属性:数据类型 = 值;
静态方法:
同样是使用static关键字
访问控制符 static function 方法名(形参):返回值类型{
//方法内容
}
5.7.3 访问静态属性和静态方法
类名.属性
类名.方法
例:
Math.floor
Math.PI
为了避免与类内成员变量冲突,访问静态属性及方法时,即使在类体内访问也最好用 类名.属性 这样的格式来写
5.7.4 应用1:使用静态属性集中管理数据
public static const PI:Number = 3.141592653589793;
比如事件定义,一般都是使用静态属性的,那我们使用中文来定义属性,就可以在代码中使用中文事件了
比如:
public static const 播放:String = "play";
使用事件时就可以用 对象.播放 来实现代码的中文化了
5.7.5 应用2:使用静态属性部分实现Enumeration(枚举) [略]
5.7.6 应用3:实现工具类
如:Math String等类
5.8 构造函数
定义:构造函数用于创建对象时供系统自动调用的函数,实现数据的初始化操作
格式:
public 类名(形参){
//构造函数名与类名相同,首字母大写,以与其它函数等区分
//形参中同样可以使用...rest运算符载入不同个数的参数,实现类似重载的功能
}
5.8.3 构造函数的返回类型
构造函数只能返回undefined值,所以return没意义。
但return可以影响构造函数向下执行代码的顺序,遇到return时,其下的代码将终止执行。
5.9 Clas的种类:动态类和密封类
密封类在运行时不能动态添加属性或方法。
动态类在运行时可以动态添加属性或方法。
默认声明的类为静态类,动态类在class关键字前有 dynamic 关键字
注意:AS3.0中的 for...in循环, for each...in循环只能遍历动态类对象的动态属性
5.10 this关键字 [略]
5.11 ActionScript3中的方法重载
public 类名(...rest){
//根据传入的函数个数进行处理
//不支持不同类型参数的区分作为重载的标准
}
5.12 含有多个类的ActionScript3 类文件的标准例子
(1)每个AS3的Class都必须写个一个和类同句的.as文件中
(2)package包体括号内只能定义一个Class
(3)在package包体中定义的Class,必须与类文件名相同
(4)在package包体括号外还可以定义其它类,这种类,叫包外类,只能被当前as文件中的成员类访问
========================================================
第6章 ActionScript3中的封装:类的成员、类、包与访问控制
========================================================
公认OOP的三大要素为:封装、继承、多态
6.1 什么是封装 [概括]
封装(encapsulation),又叫隐藏实现(hiding the implementation),具体的意思是将实现的细节隐藏起来,只将必要的功能接口对外公开。打个比喻就是汽车,用户只需要知道踏油门就会加油,打方向盘就会转向,至于汽车内部的实现细节,用户不用知道,而这些细节,就是属于封装了。
在ActionScript3.0中,使用 访问控制说明符 来控制代码的可见度。
访问控制说明符从“毫无限制”到“严格限制”的顺序是:
public 完全公开
protected 在private的基础上,允许子类访问
internal 包内可见
private 类内可见
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 引用原话: ┃
┃ ┃
┃ 一个好的OOP程序,就像人开汽车那样,对象和对象之间的交流只限于公开的接口。 ┃
┃ 好的OOP程序,没有流程执行先后的概念,只有代码单元之间如何相互交流和协同工作 ┃
┃ 的模式。这些代码单元,又被称为模块。模块在代码中的表现形式是一个单独的类或 ┃
┃ 多个类。这些类共同协作,提供一种或多种服务。 那么如何让一部分接口暴露呢? ┃
┃ 如何隐藏不对外公开的方法呢?使用访问控制说明符,这是实现封装的一个重要方法。 ┃
┃ ActionScript3使用访问控制说明符来告知外部使用者,本代码单元有哪些成员可以被 ┃
┃ 外部访问到,哪些不能被访问到。将访问控制符从“毫无限制”到“严格限制” ┃
┃ 排一下序:public、protected、internal和private。这些访问控制符,清楚明白地 ┃
┃ 描述了每个部分的访问权限。一个优秀的OOP程序,会尽可能将单个代码单元的细节隐 ┃
┃ 藏起来。换句话说,就是尽可能不要对外公开代码单元的成员。顺便说一句,不少OOP ┃
┃ 程序员最喜爱private关键字,因为这意味着最大的修改自由。很有意思,在OOP编程中,┃
┃ 你对代码单元访问控制得越严格,日后你对代码修改的自由越大。 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
6.2 为什么需要封装
6.2.1 封装使修改代码更加容易和安全
封装使程序员在后期修改代码或在应用第三方代码的时候,可以在前期严格的访问控制定义下,令