動態類別

「動態」類別會定義物件,此物件可以在執行階段,透過加入或變更屬性及方法進行改變。不是動態的類別 (例如 String 類別) 屬於「密封」類別。您不能在執行階段將屬性或方法加入至密封類別。

您可以在宣告類別時,使用 dynamic 特質,建立動態類別。例如,下列程式碼會建立名為 Protean 的動態類別:

dynamic class Protean
{
    private var privateGreeting:String = "hi";
    public var publicGreeting:String = "hello";
    function Protean()
    {
        trace("Protean instance created");
    }
}

若接著實體化 Protean 類別的實體,您可以在類別定義之外,將屬性或方法加入至此實體。例如,下列程式碼會建立 Protean 類別的實體,並將名為 aStringaNumber 的屬性加入至此實體:

var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
trace(myProtean.aString, myProtean.aNumber); // testing 3

您加入至動態類別實體的屬性是執行階段實體,因此任何類型的檢查都是在執行階段進行。您不能將類型註釋加入至以此方式新增的屬性。

您也可以透過定義函數,然後將函數附加至 myProtean 實體的屬性,將方法加入至 myProtean 實體。下列程式碼會將 trace 陳述式移入名為 traceProtean() 的方法中:

var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
myProtean.traceProtean = function ()
{
    trace(this.aString, this.aNumber);
};
myProtean.traceProtean(); // testing 3

但是以這種方式建立的方法,無法存取 Protean 類別的任何私有屬性或方法。而且,即使參考 Protean 類別的公用屬性或方法,也必須利用 this 關鍵字或類別名稱加以限定。下列範例會示範 traceProtean() 方法嘗試存取 Protean 類別的私有和公用變數。

myProtean.traceProtean = function ()
{
    trace(myProtean.privateGreeting); // undefined
    trace(myProtean.publicGreeting); // hello
};
myProtean.traceProtean();

Flash CS3

 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/main/00000046.html