文章出處

英文原文:《Tips for learning ActionScript 3.0》
原文地址:http://www.adobe.com/devnet/actionscript/articles/actionscript_tips.html
譯者:Dreamer。

學習ActionScipt的一些提示
ActionScript 3.0是一種強大的面向對象語言,它為Flash Player描繪了一種新的編程模型。如果你已經對ActionScript 1.0或2.0很熟悉,那么當你使用ActionScript 3.0開發你的第一個應用程序的時候需要知道一些語言差別。
注:更多資料,請參考Flex 2.0 Language Reference中ActionScript 2.0 和ActionScript 3.0之間的不同點的列表。
為了幫助大家更容易地過渡到ActionScript 3.0,我編輯了下面的列表,其中包括技巧和你可能在開發中會遇到的普遍的問題。

為所有變量,參數和返回值聲明類型。為所有變量,參數和返回值聲明類型不是必須的,但是它被認為是最好的習慣。它將會幫助編譯器給你更多地有用的錯誤信息。它還會增強運行時的性能,因為虛擬機將會認為你事先知道你所做的工作。實際上,它是如此重要所以如果你沒有聲明我們會給出一個警告。
注意現在沒有訪問方式的聲明都默認是internal方式,而不是public。現在默認的訪問方式是internal而不是public,這就是說這個聲明只對含有這個聲明的包可見,而不是對所有代碼都可見。這一點和其它一些語言相一致,比如JAVA。因為ActionScript2.0的聲明默認為是public,這個變化將很可能造成普遍的錯誤,所以請總是在聲明前面加上訪問方式,讓你的意圖更加清楚。為了鼓勵這個好習慣,ActionScript 3.0編譯器將在沒有訪問方式聲明的時候給出一個警告。
注意類都是默認為封裝(sealed)的,也就是說不能在運行時動態地添加屬性。現在類可以是動態的(dynamic)或者封裝的(sealed)。動態(dynamic)類可以在運行時添加動態屬性;封裝(sealed)類不行。因為不需要內部哈希表來保存動態的屬性,封裝(sealed)類占用內存少,而且編譯器可以對它提供更好的錯誤反饋。Class Foo這種聲明就是封裝(sealed)的。要聲明一個動態(dynamic)類,就使用dynamic關鍵字——比如,dynamic class Foo。
使用包(package)聲明把一個類放到一個包(package)里面。Package是ActionScript 3.0中一個新的關鍵字。
ActionScript 2.0 代碼:

class mx.controls.Button { … }
ActionScript 3.0 代碼:

package mx.controls { class Button { .. } }
在ActionScript 2.0中,一個public類必須放在一個文件名和類名相同的文件中。多個類可能在同一個文件中聲明,但是只有一個類可能是public,并且這個類的名字必須和文件名字相同。
導入類,即使對這個類的引用都是完全合法的。要使用MyPackage.MyClass類,你必須導入它:
import MyPackage.MyClass;
你必須這樣做既是所有的引用都是完全合法的,并且要使用完整的名字MyPackage.MyClass。在ActionScript 3.0中,import語句表明你想要使用一個來自另外一個包中的類,而在ActionScript 2.0中,它只是用來幫助記憶類名。在ActionScript 3.0中,完整的類名只是用來消除歧義,而不再是import語句的替代品。
也可以使用 * 通配符來導入一個包中的所有類。

import MyPackage.*;
單個地導入類被認為是一個好習慣,因為這樣更明確地表明了你的代碼使用了哪一個類。
始終標記方法的覆寫。Override關鍵字可以幫助避免覆寫方法時常見的錯誤,比如對一個被覆寫得方法定義了錯誤的名字或者被覆寫的方法的名字改變導致的錯誤。這樣做會使包含有覆寫方法的代碼看起來更清晰。因為編譯器能夠知道一個方法是否試圖覆寫另外一個,它就能執行更好的檢查。ActionScript 3.0中的override關鍵字是從C#的override關鍵字中獲得的靈感。
在函數中定義返回類型。為一個函數定義返回類型是一個好習慣。如果你忽略了返回類型,會出現一個警告。這是為了類型的安全性,這樣一來你就不會無意中沒有寫返回類型而得到默認的Object返回類型。如果一個函數沒有返回任何值,將它的返回類型聲明為void。
注意,delegate現在被定義到了語言里,使得事件分派更簡單。在ActionScript 2.0中,把事件指向到一個方法需要使用mx.utils.Delegate 類或者其他的工作:
import mx.utils.Delegate;
myButton.addEventListener(”click”, Delegate.create(this, onClick));
在ActionScript 3.0中,方法的一個引用會自動記住它引用的對象實例。這被稱為method closure。本質上來說,這就是一個自動的delegate。所以,代碼可以簡單地寫成:
myButton.addEventListener(”click”, onClick);
現在解除一個null或者undefined的引用將會拋出一個異常。解除一個null或者undefine的引用在以前的ActionScript中會被忽略并且定義引用為undefined。現在,一個TypeError異常會拋出。提防無意中解除的null或undefined引用,并且依靠這個報告錯誤的特性。這種新的拋出異常的特性與ECMAScript定義相符合。
使用-verbose-stacktraces和 -debug選項。使用命令行選項-verbose-stacktraces和-debug編譯可以使文件名和行號出現在Flash Player的警告框中。當一個運行時錯誤發生時,一個對話框會描述這個錯誤并且列出它發生錯誤的地方的調用堆棧。使用-verbose-stacktraces和-debug選項可以讓在源代碼中定位錯誤變得簡單。
顯式聲明bindable屬性。屬性不再默認為bindable。你必須使用[Bindable]元數據標簽來聲明它們為bindable。
注意Flash Player API被重新組織到了包里。以前Flash Player API中所有的類和函數都是全局的。現在有了許多包,象flash.display, flash.events, flash.ui以及其它。舉個例子,MovieClip現在是flash.display.MovieClip并且getTimer 和 setInterval都被放進了flash.utils 包中。
使用新的Timer類,而不是setInterval/setTimeout。與setInterval/setTimeout函數相比,新的Timer類為timer事件提供了更清晰的機制。新的Timer類與setInterval方法相比有很多優勢,比如不需要處理ID數字間隔,還有一個更好的,面向對象的接口。我們把使用Timer而不是使用setInterval和setTimeout看作是一個好習慣。
確認事件(event)是繼承而來的。現在事件(event)是強類型的,并且必須是新的Event基類的子類。新的Event類讓事件體系更加清晰和有效。但是,這也意味著當分派事件的時候你不能再使用Object類的通用實例了,并且你不能使用對象的文字簡寫——例如,{type: ‘customEvent’ }。
你現在需要使用Event類(例如,dispatchEvent(new Event (’myCustomEventType’))),而不是創建一個通用的Object類。如果你想要傳遞附加的屬性就需要從Event繼承。不使用Object的動機是為了獲得更高的類型安全性和效率。
注意可視的元素必須繼承自DisplayObject,并且你可以像其它類一樣定義它們。組件現在通過new動態創建并且使用addChild被添加到顯示列表中。所以,不鼓勵使用createChild。可視化的實體,包括TextField,可以像其它對象一樣實例化并且使用addChild或addChildAt簡單地添加到顯示列表中。注意,這意味著一些API消失了,比如createEmptyMovieClip 和 createTextField。你可以使用new TextField而不是使用createTextField來創建一個新的TextField。
現在在Flash中推薦使用 E4X (ECMAScript for XML)來操作XML。E4X與以前的Flash XML類相比非常強大并且更好地整合進了語言中,它還提供了很多新的性能。以前的Flash XML類依然可以使用。如果你喜歡用以前的XML API,它就在flash.xml包中。它依然可用只是重新命名成了XMLDocument。
當使用E4X的時候使用toXMLString方法。toString方法沒有為對象返回完整的XML標記;如果你想獲得,使用toXMLString方法。toString方法為XML對象返回一個簡單的字符串。它并不會完全將XML對象序列化。要獲得XML標記,請調用toXMLString方法。
For……in循環將不再枚舉類中聲明的屬性或者方法。它只枚舉一個對象的動態屬性。ActionScript 3.0特性中有一個針對對象自省的新的先進機制,叫做describeType。在ActionScript 3.0中使用它來自省對象。
現在一個SWF文件的根對象可以是你自主選擇的一個自定義類的實例。ActionScript 2.0中,一個SWF文件的根對象總是MovieClip的實例。而在ActionScript 3.0中,它可以使Sprite的任意子類。你可以設定一個類作為一個SWF文件的DocumentRoot。當其加載時,SWF文件會將它實例化然后將其作為自己的根對象。
特別感謝我們的開發團體為這篇文章提出建議。這里列出的決不是詳盡的,但是它是一個起點,可以幫助你打好學習ActionScript 3.0的基礎。如果你熟悉其它的面向對象的語言,你可能發現這些提示只是一個復習——復習你已經在別處學習到的并且可以立即在ActionScript 3.0中使用的技巧。
如果你對ActionScript 3.0和面向對象編程是一個新手,那么這些提示將會派得上用場。對你來說,這就是一個簡單的可以幫你鞏固知識的列表。編碼愉快!

歡迎轉載:http://www.kanwencang.com/bangong/20161206/63873.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()