天天看点

Flash.ActionScript3.殿堂之路 笔记 5 [类与对象]

 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关键字

复合类