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關鍵字
複合類