套件 | 最上層 |
類別 | public dynamic class Class |
繼承 | Class Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
new
運算子叫用時,建立類別的實體。
類似 flash.net.getClassByAlias()
的一些方法會傳回 Class 類型的物件。 其他方法可能會有 Class 類型的參數,如 flash.net.registerClassAlias()
。
如下列範例所示,類別名稱就是 Class 物件的參照:
class Foo { }
class Foo{}
陳述式是建立 Class 物件 Foo 的類別定義。 此外,陳述式 new Foo()
會建立類別 Foo 的新實體,而且結果會屬於 Foo 類型。
使用 class
陳述式可宣告您的類別。 Class 物件有助於進階的技巧,例如,在執行階段將類別指派到現有的實體物件 (如以下「範例」一節所示)。
類別的任何靜態屬性與方法都會存在於類別的 Class 物件中。 類別本身會宣告 prototype
。
一般而言,您不需要手動宣告或建立 Class 類型的變數。 不過在下列程式碼中,會將類別指定為公用 Class 屬性 circleClass
,您可以將此 Class 屬性當做主要 Library 類別的屬性:
package { import flash.display.Sprite; public class Library extends Sprite { public var circleClass:Class = Circle; public function Library() { } } } import flash.display.Shape; class Circle extends Shape { public function Circle(color:uint = 0xFFCC00, radius:Number = 10) { graphics.beginFill(color); graphics.drawCircle(radius, radius, radius); } }
另一個 SWF 檔可以載入所產生的 Library.swf 檔,然後實體化 Circle 類型的物件。 下例範例會說明其中一種存取 SWF 子檔案資源的方式。(其他技巧包括使用 flash.utils.getDefnitionByName()
或匯入 SWF 子檔案的虛設常式定義)。
package { import flash.display.Sprite; import flash.display.Shape; import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; public class LibaryLoader extends Sprite { public function LibaryLoader() { var ldr:Loader = new Loader(); var urlReq:URLRequest = new URLRequest("Library.swf"); ldr.load(urlReq); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); } private function loaded(event:Event):void { var library:Object = event.target.content; var circle:Shape = new library.circleClass(); addChild(circle); } } }
在 ActionScript 3.0 中,您可以為外部資源 (如影像、音效或字體) 建立內嵌類別,這些類別都會編譯到 SWF 檔中。 在舊版的 ActionScript 中,您可以搭配 MovieClip.attachMovie()
方法使用連結 ID 來連結這些資源。 而在 ActionScript 3.0 中,每項內嵌資源則都由唯一的內嵌資源類別代表。 因此,您可以使用 new
運算子來實體化資源的關聯類別,並呼叫該資源上的方法與屬性。
相關 API 元素
- 將兩個類別宣告為
ClassA
和ClassB
。 - 宣告 Class 類型的變數 (名為
classToConstruct
) 及 Boolean 類型的變數chooseClassA
(在此案例中設定為true
),但是您的程式碼可以使用自訂測試運算式來設定該變數的值。
package { import flash.display.Sprite; public class ClassExample extends Sprite { public function ClassExample() { var classToConstruct:Class; var classInstance:Object; classToConstruct = ClassA; classInstance = new classToConstruct(); trace(classInstance); // [object ClassA] classToConstruct = ClassB; classInstance = new classToConstruct(); trace(classInstance); // [object ClassB] } } } class ClassA { } class ClassB { }
Tue Jun 12 2018, 03:47 PM Z