AS3.0教程:強大的事件機制(3)

2) addEventListener語法的不同,原因,和const型必要性和用法
本例如果是AS2.0,那麼代碼是這樣寫的:
outsideChild.addEventListener("click", inclassHandler)
本例是3.0,如果你trace一下其中的MouseEvent.CLICK,輸出的也是字符串"click"。
看起來AddEventListener的方法和以前也沒什麼大的出入。和這世界上大多數相同的事物一下,表象的類似卻掩蓋着本質的巨大差異。
 
我們先從最小的差異講起:
[1b]1.使用類靜態屬性,用const定義事件字符串名稱變量[/1b]
AS3.0中用了一個新的關鍵字定義了事件名稱字符串變量,代碼是
public static const CLICK:String = "click"
const,是英文constant的縮寫,意思使不變的,常量。那就意思很明白了,一旦這種類型的常量被定義就不可再更改。好處通俗的說就是規範好項目,規範你自己,也規範任何其他項目人員,動不了這個變量。
你可能還是會不屑一顧,這麼小的一個改動,對我沒什麼用!
可我的AS2.0開發血淚經驗是,我曾經花了一個下午來找bug,最後卻發現是某個類的addEventlistener()裏面的事件名稱"click"手誤打成了"cilck"。編譯器可不管這個。
如果是3.0,你打成了MouseEvent.CILCK,那麼編譯時立刻會報錯提醒你,多好啊。一個項目一個人做十幾個類還好辦,自己認真點還能頂的住;如果是一個項目幾個人幾十個類,那麼沒有const和static的幫忙,管理事件類型還真是有點麻煩。即使實現了也沒有AS3.0這麼簡單直觀。
回到代碼,我們要記住,日後我們開發自己的Event類時,也要像這樣,用public static const來定義我們自己的事件名稱。
如何自定義自己的事件,我會在EventDispatch那一節講述。
 
看看代碼,我們還發現AS3.0中偵聽器也發生變化了,只能用function來做偵聽器,不再用Object。
[1b]2.addEventListener高級運用[/1b]
AS3.0中對偵聽器的改進遠遠不止以上這些,看一看addEventListener的實現接口:
function addEventListener(eventName:String,
listener:Object,
useCapture:Boolean=false,
priority:Integer=0,
useWeakReference:Boolean=false):Boolean;
哇塞,有三個莫名奇妙的參數。可是當你知道這三個參數背後隱藏的巨大改進之後,相信你要大叫三個哇塞。
第一個神祕參數,目前暫不解釋,埋個伏筆,留到EventDispatcher那一節,講ActionScript3嶄新的Event Flow事件流機制.
第二個參數:優先級。 有趣吧,在ActionScript 3.0中我們可以控制事件的優先級,從而達到控制function偵聽器的執行順序。如果你不填這個參數,那麼事件默認爲同一個級別0,事件的執行按先來後到的天經地義的順序。
如果設爲1,那麼事件級別降一個檔次,稍後執行。數字越高優先級越高。級別可以爲負數。
[1b](注意: Flex Builder 2 Beta3中事件級別是越低越高)[/1b]
 
好好利用這個功能吧,在AS2.0中要想達到同樣效果可不知道要多費多少力氣!
第三個參數,講的是是否設爲弱引用。
兄弟們初學As2.0時一定經常忘了在刪除Listener對象時,卻忘了removeEventListener吧。這會導致很多莫名奇妙的情況發生。也是最常見的詭異bug種類之一。即使老鳥偶爾也會被陰一把。
最鬱悶的是這種情況往往不被發現,在後臺默默的消耗大量資源。
現在可以用弱引用可以在某種程度上解決這種bug。
設爲true,就是告訴垃圾回收器,這個偵聽器function的引用是弱引用。一旦這個偵聽器在運行時只剩下了這一個弱引用,那麼垃圾回收器可以不理它,直接把它回收咯屁了,節省資源。
[1b]從AS3.0引入這個弱引用這個概念就可以看出,AS3.0是如何的重視資源管理和有效率的運用。一個標準的重量級的程序語言必須具有這樣的特徵。
現在AS3.0有了![/1b]
下一節:
(3) Listener和As2.0有何不同,和this關鍵字的“改進了的記憶力”
本文轉自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1763.html
發佈了14 篇原創文章 · 獲贊 1 · 訪問量 1919
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章