ActionScript 3 面向对象
//类的成员 类和对象的关系 .操作符 package import 构造函数 密封类 动态类
类(Class): 泛指一切具有状态(属性)和行为(方法)的数据集合
对象(Object): 类的一个实例
权威定义: 一个对象有自己的状态 行为和唯一的标示符
所有相同类型的对象所具有的结构和行为在它们的共同的类(Class)中被定义
类的实例: 一个对象的具体化
类的成员:{
属性(状态)[state]: 包括这个对象已有的属性再加上对象所具有的当前属性值
方法(行为)[behavior]: 指一个对象如何影响外界及被外界影响
表现为对象自身状态的改变和信息的传递
标识(identity): 指一个对象所具有的区别于所有其他对象的属性
构造函数: 用来初始化对象
}
.操作符
使用对象名.属性(方法)来操作对象
package{
class Rectangle{
var width:Number; //属性
var height:Number;
var area:Number;
public function Rectangle(width:Number,height:Number){ //构造函数
this.width=width; //初始化
this.height=height;
}
public function getArea():Number{ //方法
area=height*width;
return area;
}
}
}
先定义类(Class) 再创建 Class 的实例 实例创建后 才可以访问实例属性和方法
创建类的实例(对象){
1 新建flash文件
2 将上述类代码写在一个单独的ActionScript文件中 文件名为 Rectangle.as
保存在和flash文件同一个文件夹下
3 将下述实例代码保存为 RectangleTest.as 放在和flash文件同一文件夹下
package {
import flash.display.Sprite;
public class RectangleTest extends Sprite{
public function RectangleTest(){
var o:Rectangle=new Rectangle(10,10);
trace(o.getArea());
}
}
}
4 在flash文件属性面板连接到类 TectangleTest CTRL+ENTER 测试
}
package: 定义包的路径 在AS3 中必须定义 如果没有指定路径 应该定义为package{}
import: 导入所需的类文件
类结构{
package 包路径{
class 类名{
1 静态属性
2 静态方法
3 实例属性 //描述对象的状态
4 构造函数 //初始化对象
5 实例方法 //描述对象的行为
}
}
}
类成员中属性又分1静态属性和3实例属性
类成员中方法又分2静态方法和5实例方法
静态属性和方法是和类相关 直接使用
实例属性和方法是和对象相关 必须先创建类的实例(对象)后使用
每一个对象都具有实例属性和实例方法
使用 static 定义的属性和方法必然是静态属性和方法
{
package{
class Rectangle{
public static var Name:String="Box"; //静态属性
public var area:Number,height:Number,width:Number; //实例属性
public static function traceName():void{ //静态方法
trace(Name);
}
public function Rectangle(width:Number,height:Number){ //构造函数
this.width=width;this.height=height;
}
public function getArea():Number{ //实例方法
area=width*height;
return area;
}
}
}
package {
import RectangleStatic;
import flash.display.Sprite;
public class RectangleStaticTest extends Sprite{
public function RectangleStaticTest(){
trace(RectangleStatic.Name); //直接通过类名.方法使用
RectangleStatic.traceName();
}
}
}
构造函数{
构造函数是一个命名为类名的函数 没有返回值 可以有0个或多个参数 用来初始化对象
每个对象被创建时都会调用构造函数
如果没有定义构造函数 那么ActionSctipt 调用默认的构造函数 () 来初始化对象
一个没有参数的空函数
一旦定义自己的构造函数 那么默认的构造函数将不可用
构造函数必须使用 public 访问控制
public function Rectangle(width:Number,height:Number){ //构造函数
this.width=width; //初始化 实例属性 width = 参数 width
this.height=height; //实例属性 height = 参数 width
}
var o:Rectangle=new Rectangle(10,10);
//新建一个对象o 类型为Rectangle 调用构造函数 传入2个参数 用来初始化对象 o
//设置长为10 宽为10
}
密封类和动态类
以上类文件都是密封类 及不可以添加动态属性和方法
使用 dynamic 关键字定义的类叫做动态类 可以在运行时添加动态属性和方法
动态类性能不如密封类 检测比较宽松 但比较灵活
public dynamic class Foo{
var name:String="tigerz";
}
var o:Foo=new Foo();
o.url="blog.csdn.net.ttigerdna"; //动态添加属性
使用for...in 和 for each...in 只能检测到对象的动态属性
this关键字
复合类