flash:學習ActionScript的一些提示

來源:互聯網
上載者:User
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,我編輯了下面的列表,其中包括技巧和你可能在開發中會遇到的普遍的問題。

為所有變數,參數和傳回值宣告類型。為所有變數,參數和傳回值宣告類型不是必須的,但是它被認為是最好的習慣。它將會協助編譯器給你更多地有用的錯誤資訊。它還會增強運行時的效能,因為虛擬機器將會認為你事Crowdsourced Security Testing道你所做的工作。實際上,它是如此重要所以如果你沒有聲明我們會給出一個警告。

注意現在沒有訪問方式的聲明都預設是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.cnflex.cn/html/as/20070320/73.html》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.