as3備忘七-動態類(摘書)

    看了動態類,內容不多,也就不總結了,偷賴,把《ActionScript3.0 編程》一書中的內容摘錄如下,博客類型寫了原創,原創摘錄^_^

-----------------------------------------我是華麗的分隔線---------------------------------------------------

 

動態類
“動態”類定義在運行時可通過添加/ 更改屬性和方法來改變的對象。 非動態類(如 String類)是“密封”類。您不能在運行時向密封類中添加屬性或方法。


在聲明類時,可以通過使用 dynamic 屬性來創建動態類 。例如,下面的代碼創建一個名爲
Protean 的動態類:

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

 


如果要在以後實例化 Protean 類的實例,則可以在類定義的外部向該類中添加屬性或方法
例如,下面的代碼創建 Protean 類的一個實例,並向該實例中添加兩個名稱分別爲 aString和 aNumber 的屬性:

var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
trace(myProtean.aString, myProtean.aNumber); // 測試 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(); // 測試 3

 


但是,以這種方式創建的方法對於 Protean 類的任何私有屬性或方法都不具有訪問權限。而且,即使對 Protean 類的公共屬性或方法的引用也必須用 this 關鍵字或類名進行限定。 下面的示例說明了 traceProtean() 方法,該方法嘗試訪問 Protean 類的私有變量和公共變量。

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

 

 

 -----------------------------------------我,華麗的分隔線,再次出現-------------------------------------

 

這其實和javascript中的機制類似,不同的是在javascript中,可以對任意對象,在任何時候,任意的添加屬性和方法。而as3對此做了很大的限制,它們本來也是基於同一標準實現的。但as3已經有些接近強類型語言了。

 

最後,鄙視一下自己抄書的行爲!!-_^

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章