本文介紹了ActionScript 3 相對(duì)于 ActionScript 2 有哪些新的特性和改動(dòng)。并在文章的最后一步步的教大家如何利用 Flex Builder 來編譯并運(yùn)行第一個(gè) AS3 程序。語法方面的增強(qiáng)和改動(dòng):
- 引入了 package(包) 和 namespace(命名空間) 兩個(gè)概念。其中 package 用來管理類定義,防止命名沖突,而 namespace 則用來控制程序?qū)傩苑椒ǖ脑L問。
- 新增內(nèi)置類型 int (32比特整數(shù)),uint(非負(fù)32比特整數(shù)),用來提速整數(shù)運(yùn)算;
- 新增 * 類型標(biāo)識(shí),用來標(biāo)識(shí)類型不確定的變量,通常在運(yùn)行時(shí)變量類型無法確定時(shí)使用。在 AS2 中這種情況下需要用 Object 賴作為類型表識(shí);
- 新增 is 和 as 兩個(gè)運(yùn)算符來進(jìn)行類型檢查。其中 is代替 AS2 中的 instanceof 來查詢類實(shí)例的繼承關(guān)系,而 as 則是用來進(jìn)行不拋錯(cuò)誤的類型轉(zhuǎn)換。
- 新增 in 運(yùn)算符來查詢某實(shí)例的屬性或其prototype中是否存在指定名稱的屬性。
- 新增 for each語句來循環(huán)操作 Array 及 Object實(shí)例。
- 新增 const 語句來聲明常量。
- 新增 Bound Method 概念。當(dāng)一個(gè)對(duì)象的方法被付值給另外一個(gè)函數(shù)變量時(shí),此函數(shù)變量指向的是一個(gè) Bound Method,以保證對(duì)象方法的作用域仍然維持在聲明此方法的對(duì)象上。這相當(dāng)于 AS2 中的 mx.util.Delegate 類,在 AS3 中這個(gè)功能完全內(nèi)置在語言中,不需要額外寫代碼。
- AS3 的方法聲明中允許為參數(shù)指定默認(rèn)值(實(shí)現(xiàn)可選參數(shù))。
- AS3 中方法如果聲明返回值,則必須明確返回。
- AS2 中表示方法沒有返回值的 Void 標(biāo)識(shí),在 AS3 中變更為 void。
通過類定義而生成的實(shí)例,在 AS3 中是屬于 Sealed 類型,即其屬性和方法無法在運(yùn)行時(shí)修改。這部分屬性在 AS2 中是通過類的 prototype 對(duì)象來存儲(chǔ),而在 AS3 中則通過被稱為 Trait 的概念對(duì)象存儲(chǔ)管理,無法通過程序控制。這種處理方式一方面減少了通過 prototype 繼承鏈查找屬性方法所耗費(fèi)的時(shí)間(所有父類的實(shí)現(xiàn)方法和屬性都會(huì)被直接復(fù)制到對(duì)應(yīng)的子類的 Trait 中),另一方面也減少了內(nèi)存占用量,因?yàn)椴挥脛?dòng)態(tài)的給每一個(gè)實(shí)例創(chuàng)建 hashtable 來存儲(chǔ)變量。如果仍然希望使用 AS2 中類實(shí)例在運(yùn)行時(shí)的動(dòng)態(tài)特性,可以將類聲明為 dynamic。api方面的增強(qiáng)
- 新增 Display API,使 AS3 可以控制包括 Shape, Image, TextField, Sprite, MovieClip, Video, SimpleButton, Loader在內(nèi)的大部分 DisplayList 渲染單位。這其中 Sprite 類可以簡(jiǎn)單理解為沒有時(shí)間軸的 MovieClip,適合用來作為組件等不需要時(shí)間軸功能的子類的基礎(chǔ)。而新版的 MovieClip 也比 AS2 多了對(duì)于 Scene(場(chǎng)景)和 Label(楨標(biāo)簽)的程序控制。另外,渲染單位的創(chuàng)建和銷毀通過聯(lián)合 new 操作符以及 addChild/removeChild 等方法實(shí)現(xiàn),類似 attachMovie 的舊方法已被舍棄,同時(shí)以后也無須去處理深度值。
- 新增 DOM Event API,所有 在DisplayList 上的渲染單位都支持全新的三段式事件播放機(jī)制,以 Stage 為起點(diǎn)自上而下的播報(bào)事件到 target 對(duì)象(此過程稱為 Capture Phase),然后播報(bào)事件給 target 對(duì)象(此過程稱為 Target Phase),最后在自下而上的播報(bào)事件(此過程稱為 Bubbling Phase)。
- 新增內(nèi)置的 Regular Expressions (正則表達(dá)式)支持,使 AS3 能夠高效地創(chuàng)建、比較和修改字符串,以及迅速地分析大量文本和數(shù)據(jù)以搜索、移除和替換文本模式。
- 新增 ECMAScript for XML (E4X)支持。 E4X 是 AS3 中內(nèi)置的 XML 處理語法。在 AS3 中 XML 成為內(nèi)置類型,而之前的 AS2 版本 XML 的處理 api 轉(zhuǎn)移到 flash.xml.*包中,以保持向下兼容。
- 新增 Socket類,允許讀取和寫入二進(jìn)制數(shù)據(jù),使通過 AS 來解析底層網(wǎng)絡(luò)協(xié)議(比如 POP3, SMTP, IMAP, NNTP 等)成為可能,使 Flash Player 可以連接郵件服務(wù)器和新聞組。
- 新增 Proxy 類來替代在 AS2 中的 Object.__resolve 功能。
- 新增對(duì)于 Reflect (反射)的支持,相關(guān)方法在 flash.util.* 包中。
編譯 AS3 需要先安裝 Flex Builder 2(目前唯一支持 AS3 的 IDE),從 Adobe Labs 上下在最新版本的 Flex Builder。然后一路 Next 安裝成功之后,點(diǎn)擊快捷方式啟動(dòng) Flex Builder。(如圖一)
圖一 Flex Builder 2 啟動(dòng)畫面
點(diǎn)選工具欄中的 New 按鈕,從彈出的菜單中選擇 ActionScript Project。(如圖二)
圖二 建立新的 ActionScript Project
在彈出的對(duì)話框中輸入 helloworld 作為項(xiàng)目名稱。然后按 Finish 確定。(如圖三)
圖三 輸入項(xiàng)目詳細(xì)信息
在新打開的 helloworld.as 文件中輸入下列代碼:(如圖四)
圖四 helloworld.as 代碼內(nèi)容
按 Ctrl+S 保存文件,然后從工具欄中點(diǎn)擊 run 按鈕運(yùn)行程序。(如圖五)
圖五 運(yùn)行程序
最終在瀏覽器中的運(yùn)行效果如圖六:
圖六 helloworld 程序運(yùn)行結(jié)果