語言概觀

物件是 ActionScript 3.0 語言的核心要素,也是基本的建構單元。您所宣告的每一個變數、所撰寫的每一個函數,以及所建立的每一個類別實體都是物件。您可以將 ActionScript 3.0 程式視為一組執行工作的物件,這些物件會回應事件,並且彼此進行通訊。

熟悉 Java 或 C++ 物件導向程式設計 (OOP) 的程式設計人員可能會將物件視為包含以下兩種成員的模組:儲存在成員變數或屬性的資料,以及可透過方法存取的行為指令。ActionScript 3.0 會以相似但略有不同的方式來定義物件。在 ActionScript 3.0 中,物件只是屬性的集合。這些屬性是容器,不但能保存資料,也能保存函數或其它物件。若函數是以這種方式附加到物件上,則稱為方法。

雖然具有 Java 或 C++ 背景的程式設計人員可能會覺得 ActionScript 3.0 的定義有些奇怪,但是在實際作業時,以 ActionScript 3.0 類別定義物件類型其實與 Java 或 C++ 中定義類別的方式非常類似。兩種物件定義的區別只有在討論 ActionScript 物件模型及其它進階主題時才會有意義,但在其它大部分情況下,所謂「屬性」一詞是指類別成員變數,與方法相對。例如,「適用於 Adobe Flash Platform 的 ActionScript 3.0 參考 」這本書使用「屬性」這個詞彙,來表示變數或 getter-setter 屬性。並使用「方法」一詞代表屬於類別之一部分的函數。

ActionScript 中的類別與 Java 或 C++ 中的類別之間有一項微妙的差異,就是在 ActionScript 中,類別不僅只是抽象實體。ActionScript 類別是以儲存類別之屬性和方法的「類別物件」來表示,因此,您便能夠運用 Java 和 C++ 程式設計人員可能會覺得性質很不相同的技巧 (例如,在類別或套件的最上層包含陳述式或可執行的程式碼)。

ActionScript 類別與 Java 或 C++ 類別之間還有另外一項差異,就是每一個 ActionScript 類別都有所謂的「原型物件」。在舊版 ActionScript 中,原型物件連結在一起形成「原型鏈」,而整體做為整個類別繼承階層的基礎;但是在 ActionScript 3.0 中,原型物件在繼承系統中只扮演份量很輕的小角色,原型物件依舊十分有用,它可以替代靜態屬性和方法,在類別的所有實體間共享屬性及其值。

在過去,進階 ActionScript 程式設計人員都可以利用特殊的內建語言元素,直接操控屬性鏈;既然語言現在可提供更成熟的類別架構式程式設計介面實作,這些特殊語言元素中有很多 (例如 __proto__ __resolve ) 已不再是語言的一部分。而且,將內部繼承機制最佳化的作法讓效能大幅提升,可防止直接存取繼承機制。