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关键字
复合类