天天看點

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關鍵字

複合類