01 : id屬性并不是每個MXML標記必須的;
02 : MXML的根標記不支持id屬性;
03 : 布爾屬性的值只允許true或false;
04 : 標記必須同時包含source和destination屬性,并且不能包含id屬性;
05 : 標記的field屬性是必須的,并且不能包含id屬性;
06 : 標記必須包含wsdl或者serviceName屬性,并且不能同時使用;
07 : 標記必須包含source或者named屬性,并且不能同時使用;
08 : 標記必須包含url或者serviceName屬性,并且不能同時使用;
09 : 標記必須包含name屬性,并且不能包含id屬性;
10 : 標記必須包含name屬性,并且不能包含id屬性。
7.1.1 AS 3.0 不是 AS 2.0 簡單的升級AS 3.0 支持運行期間的數(shù)據(jù)類型驗證。AS 2.0只支持者編譯期間的類型驗證。增強的異常處理機制使用新的虛擬機AVM2(ActionScript Virtual Machine),代碼的運行速度提升了10倍以上。
請結(jié)合上文閱讀下面的小貼士
var str:* 這里的星代表不確定類型,可以賦予任意類型的值。
使用下面的代碼來捕獲/處理異常: try{ 代碼 }catch(errObject:Error){ trace("這里在代碼處發(fā)生錯誤執(zhí)行,錯誤信息:"+errObject.message); }finally{ trace("這里一定會被執(zhí)行"); }
AS2.0 代碼編譯為字節(jié)碼,體積小且安全,無法直接瀏覽SWF中的代碼,但執(zhí)行效率較低。計算機采用的是二進制代碼來執(zhí)行。AS3.0采用了JIT(Just in time compilation)技術(shù),程序中運行時將字節(jié)碼翻譯為二進制碼,并保存在內(nèi)存中,從而改善了字節(jié)碼的執(zhí)行性能。
|
7.1.2 面向?qū)ο蟮木幊趟枷?/STRONG>
在AS3.0中所有一切都是對象,每個對象都具有自己的屬性和方法。
在面向?qū)ο蟮某绦蛟O(shè)計中,對象必須被定義為類,它具有如下面向?qū)ο蟮奶匦裕?BR>
封裝 :最主要的優(yōu)點就是將對象的信息隱藏,吧功能模塊化。用戶關(guān)心的是怎么去用這個類,不關(guān)心它是怎么實現(xiàn)的。繼承 :子類可以繼承父類的方法和屬性,還可以增加自己的新功能和屬性。可重用 :體現(xiàn)了封裝和繼承的優(yōu)點。
抽象類:無法產(chǎn)生對象,定義很廣泛,范圍很大,無法有與之對應(yīng)的具體實現(xiàn)。用來被其子類繼承,它的子類必須定義了父類的抽象方法。
7.2 AS 3.0 的面向?qū)ο笳Z法
7.2.1 創(chuàng)建類和對象
在ActionScript 中,類以as 為擴展名,文件名和類名相同。區(qū)分大小寫,基本語法:
package 包名 { 修飾詞 class 類名 { //代碼塊 } } |
package :類所屬的包,一個類必須被放在包中。一個包對應(yīng)文件系統(tǒng)中的一個文件夾,多層級的包對應(yīng)多層級的文件夾,層級之間用點號分開:package mx.controls
類和變量以及函數(shù)名都遵循相同的命名規(guī)則,只能由字母、數(shù)字和下劃線組成,不能以數(shù)字開頭。類的定義必須在package 里面。
在一個AS類文件中,只能有一個public 類型的類,位于package 里面,且文件名必須和這個類名相同。
類有以下的修飾詞:
public:公有類型,這個類可以在任何地方的任何對象訪問,一般用來定義全局使用的類。internal:內(nèi)部類型,只能在同一個package 中的類才能訪問,如果沒有指定修飾詞為internal。dynamic:動態(tài)類型,類的屬性和方法不確定,允許在運行時動態(tài)的添加。MovieClip 類便是動態(tài)類。當要繼承動態(tài)類時,也要定義為動態(tài)類型。一般只用于特殊場合。final:終點類型,表示類是繼承關(guān)系中的終點,不能被繼承??梢员灰暈橐粋€固定的、無法被動態(tài)修改的常數(shù)。 public 和 internal 是最基本的修飾詞,可以用來定義dynamic 和 final 類的類型。
在一個as文件中,可以定義多個類,但只能一個類位于package 中。
var 對象名:類名 = new 類的構(gòu)造函數(shù)(); //實例化一個類
var 關(guān)鍵字用來聲明一個變量或?qū)ο蟆?BR>如果使用的類和代碼所在的對象不在同一個包時,需要用 import 關(guān)鍵字將它引用進來:import 類的路徑
類的構(gòu)造函數(shù):定義變量時被調(diào)用,跟類名相同的函數(shù),必須是public類型,且沒有返回值。構(gòu)造函數(shù)是可選的,當沒有定義時,編譯器會自動添加一個空的函數(shù)。
7.2.2 定義屬性和函數(shù)
屬性是定義在類中的變量或者常量,而方法則對應(yīng)一個函數(shù),當調(diào)用類的方法時,也就是執(zhí)行一個函數(shù)來完成相應(yīng)的功能。
屬性定義:定義一個類型為String的屬性str,并符初始值"Hello"
private var str:String = "Hello";
方法:定義了一個方法ff 返回值為空,方法必須定義返回值
public function ff():void{//方法代碼};
使用關(guān)鍵字 this 代表當前對象,指向類的實例。只有在創(chuàng)建類的實例時,this 才確立了自己的身份。
屬性和函數(shù)有以下修飾詞:public > internal > protected > private public:公有類型,可以被所有的類使用。protected:保護類型,定義的屬性和函數(shù)可以在內(nèi)部使用,或者在子類的內(nèi)部使用,但外部是無法看到的。private:私有類型,最嚴格的類型,只能在類的內(nèi)部使用,外部無法看到的。internal:內(nèi)部類型,只能在同一個package 內(nèi)部使用,可以被同一個 package 內(nèi)的類訪問。
函數(shù)參數(shù)默認值:如果調(diào)用函數(shù)時沒有傳入值,則使用默認值。
public function doTest(s:String = "默認值"):void{//代碼}
函數(shù)的不定參數(shù):參數(shù)的個數(shù)可以動態(tài)改變,不定參數(shù)使用...args 的形式,其中args是一個數(shù)組,存放了所有的參數(shù)。比如:
public function doTest(...args):void{
args[0];
args[1];
.....
}
調(diào)用時:
doTest("參數(shù)1","參數(shù)2",...);
7.2.3 靜態(tài)屬性、函數(shù)和常量
類的屬性或者函數(shù)具有唯一性,即使類沒有被實例化,它們也始終存在于內(nèi)存中,不管類有多少個實例,靜態(tài)屬性和函數(shù)都只有1個,且和實例沒有關(guān)系。
靜態(tài)函數(shù)只能訪問類的靜態(tài)變量和靜態(tài)函數(shù)。
定義靜態(tài)類型:使用關(guān)鍵字 static ,其中public 和static 位置可以對調(diào)。
public static var str:String = "Hello";
public static function doTest(s:String):void{}
定義常量:常量的值在確認后就不能改變,使用關(guān)鍵字 const 定義:
public const STR:String = "我是常量";
如果將常量定位為靜態(tài)類型,就成為了類的 靜態(tài)常量。
一般采用大寫字母定位常量。
7.2.4 繼承
繼承是指在已有類的基礎(chǔ)上加新的屬性和方法,保留了已有類的屬性和方法。
AS 3.0 只允許一次繼承一個父類。
子類可以訪問父類中 public 和protected 類型的屬性和函數(shù),如果父類和子類中同包下,可訪問internal類型的屬性和方法,但private是無法訪問的。
子類不能定義父類非private類型的屬性和方法。
繼承類使用關(guān)鍵字 extends:
public class subFl extends Fl
覆蓋父類的方法:使用關(guān)鍵字 override ,在覆蓋時,方法的格式必須是一樣的。
父類方法:protected function doTest():void;
覆蓋的方法:override protected function doTest():void;
調(diào)用父類的方法:super.doTest();
使用final 關(guān)鍵字定位為類不能被繼承。
7.2.5 接口
AS3.0 沒有提供定義抽象類的方法,只提供了接口。
接口是若干方法的集合,它只聲明這些方法,而不實現(xiàn)方法。描述一類具有共同特性的對象,這些對象都實現(xiàn)了接口中的方法,同時有自己的特點。
接口只支持:public 或者 internal
定義接口:
public interface IExample{
function start(task:String):void;
function stop(task:String):void;
}
接口也可以實現(xiàn)繼承,一次能繼承多個接口:
public interface IExample extends Iinterface1, Iinterface2
接口的實現(xiàn):implements ,一次可以實現(xiàn)多個接口,用逗號分隔。
public class Example implements IExample{
public function start(task:String):void{
//
}
public function stop(task:String):void{
//
}
}
在實現(xiàn)類中,必須定義接口中所有的方法,且遵循以下規(guī)則:
函數(shù)必須聲明為 public 類型函數(shù)名相同參數(shù)數(shù)量和類型相同返回值類型相同
同時繼承類和實現(xiàn)接口:
public class Example extends Canvas implements IExmple