指定在執行時類的例項可以擁有新增的動態屬性。如果使用某個類上的dynamic
屬性,您可以在執行時向該類的例項新增屬性。未標記為dynamic
的類被視為密封類,這意味著不能向該類的例項新增屬性。
如果某個類是密封的(非動態),則嘗試獲得或設定該類例項中的屬性就會導致錯誤。如果將編譯器設定為嚴格模式並在建立例項時指定資料型別,則嘗試向密封物件新增屬性將生成編譯器錯誤;否則發生執行時錯誤。
dynamic
屬性不能被子類繼承。如果擴充套件動態類,則只有宣告子類具有dynamic
屬性時,子類才是動態的。
在這裡我們要強調二點:1.動態類隨可以動態增加方法,但是動態增加的方法只能訪問原類中的public訪問許可權,private許可權是無法訪問的。
2.動態的增加屬性,還可以覆蓋其原有的方法
dynamic class persondynamic class person
我們可以建立person的例項,動態的增加屬性,還可以覆蓋其原有的方法,比如覆蓋tostring()方法:
var p:person = new person();
p.age = 25;//動態增加屬性
p.tostring = function():string
trace(p);//輸出結果:doe,joe-25
應該注意動態的增加屬性或覆蓋原有方法時,該dynamic類的屬性是private的,我們便不能訪問到該屬性。例如:假設我們使person這個物件的lastname是private,而不是public,那麼我們的輸出結果就是:undefined,joe-25.
as3中有幾個類是動態類來的error
regexp
date
function
class
array
movieclip
這些都是動態類,可以動態新增屬性,加是可以加了,但加也有一定規則,需要使用陣列訪問符來加 和 訪問
陣列訪問符有兩種作用
1. 動態設定屬性
2. 動態獲取屬性(相對意義上的動態)
不能使用點語法 . ,要使用陣列訪問符 ,但有乙個例外,movieclip是可以直接使用點語法來訪問動態屬性
陣列訪問符有兩種作用參考:1. 動態設定屬性
2. 動態獲取屬性(相對意義上的動態)
動態與靜態是相對的概念,在計算機概念上,編譯檔案的時候(即按下ctrl+enter時),編譯器(你不懂的話,先可以理解成flash軟體)會先對源**中 宣告的物件 屬性 方法 以及場景中所有物件
(比如乙個 它其實是乙個bitmap物件 乙個影片剪輯 它其實還是乙個movieclip物件 只不過存在於場景中 顯示出來罷了 實際在檔案內部它還是識別為乙個物件)
編譯器會對這些已經存在的物件作一次點名,並把它們記錄在乙個「列表」中(這個列表是 flashplayer底層自動維護的 我們不用理)
因為這個表已經記錄在案所有編譯階段已經宣告的物件,程式使用它們的時候 ,就可以在這個列表中查詢
說到這裡 不得不說一下記憶體空間的事情了
因為不同的資料型別 它們在記憶體中都有一定的固定位元組長度 編譯階段已經宣告的物件 執行時記憶體空間就已經申請好了
不會頻繁向系統申請記憶體了 (系統的記憶體不是你想要就要 它像乙個停車場 需要排程才可以騰位置的 太多的空位間隔 就要把車移動騰在一起 以整理出大空地(記憶體)) 這個騰空間的概念 差不多就是記憶體整理 ,需要浪費一定的系統資源的
所以說靜態編譯的物件 會相對省系統資源 ,這個也是as3.0中大部分類都預設為密封類(即不能隨便新增動態屬性)的原因了
上面這段是解釋為什麼不能用 .屬性 來新增 動態屬性 的原因,as3中大部分物件都是密封類,不能直接使用 .屬性 來新增
關於AS3中的深度複製
關於as3中的深度複製 url 參見 url 只能複製object屬性,或者類屬性,不能複製類方法。例如 color 0000ff class color a var a a new a 這時候轉殖乙個a例項 color 0000ff trace color cn.snowkit.utils.cob...
關於as3效率的優化
1.a b 要比 a a b 快,同樣,自增a 也比a a 1快,不過自減a 不是比a a 1快。2.在做除以2操作時,乘法比除法快,位運算更快.但是不要位運算來操作number型別的變數,因為它會將number型別的數值轉為整數型別。for int a b 1 faster than a b 5 ...
as3中的容器
4種容器 array object vector dictionary 各自特點 array是索引陣列,雖然它也是動態類,可以等同於object來用,但是不建議這樣,因為沒有任何好處。除了鍵上的區別外,array還是善於隨機訪問的,但不知道object和dictionary和它在訪問速度上的區別有多...