關於Flash AS2.0中的 Intrinsic 類

關於Flash AS2.0中的 Intrinsic 類

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

作者: senocular    翻譯:LeeFJ

原文地址:http://www.kirupa.com/developer/oop2/AS2OOPindex.htm

    在ActionScript 2.0中,還存在另外一種類,那就是Intrinsic 類,但是事實上它卻不是真正的類。它更像是與類相關的一些指導,它只有一個目的,那就是爲已存在的類提供嚴格數據類型定義。Macromedia 用intrinsic類來爲 在Flash內部的類和對象定義數據類型(你可以在Flash MX 2004的安裝目錄下的Classes文件夾下找到這些定義文件)。包括Array, MovieClip和Math等對象。但是,我們什麼時候會去使用他們,我們什麼時候需要去定義這樣數據類型的類呢?

最有可能的情況是,當你作爲一個開發者,並且正在開發一個基於ActionScript 2.0Movie,這個時候你要在你的Movie中使用ActionScript 1.0,那麼你就必須親自定義一個intrinsic類了。

正如我們所知道的,ActionScript 1.0中是沒有嚴格數據類型的。這也並不那麼糟糕,但它也不是什麼好事。在MX 2004及其後來的版本中,你需要這些數據類型定義來幫助你維護工程的有效性和高效性。這就是intrinsic類出現的原因。

我們假設你有一個非常完美的類,它可以幫助你完成現在新的工程中的大量任務,但可惜的是,這個類使用ActionScript 1.0Ok, no problem,你可以把ActionScript 2.0ActionScript 1.0無縫的結合。你不需要用ActionScript 2.0來重新寫一遍你的類,你唯一所要做的事情是寫一個instrinsic 類,並且羅列出已經使用的那些數據類型

按此在新窗口瀏覽圖片screen.width-333)this.width=screen.width-333" border=0>

[ intrinsic 類是一個已存在類的類型定義 ]

所有你需要做的事情就是去創建一個與原先類同名的ActionScript 2.0類,並且標記爲instrinsic,就像你把類標記爲dymanic(如果需要的話,也可以把它們兩個同時加上)。在這個文件中,正確輸入原先類所有的屬性和方法,但不需要定義。這樣,你就不需要完全重寫一遍類,因爲在新類中不許要包含方法和屬性的定義。這裏有一個這樣的例子,代碼如下:

// Wonderful.as 中可以使用如下代碼:

intrinsic class Wonderful

{

var msg:String;

function doSomethingWonderful(allow:Boolean):Void;

}

// ActionScript 1.0 class in main Flash movie

var Wonderful = function(msg)

{

this.message = msg;

};

Wonderful.prototype.doSomethingWonderful = function(allow)

{

if (allow)

 {

trace(this.message +" is Wonderful!");

}

};

var ItsA:Wonderful = new Wonderful("Life");

ItsA.doSomethingWonderful("yes"); // 錯誤: 類型不匹配;

ItsA.doSomethingWonderful(true); // 正確

     雖然這個類是用ActionScript 1.0來定義的,編譯器仍舊可以辨別出數據類型不匹配的情況,比如在剛纔的doSomethingWonderful方法中傳入一個String類型的參數,這要歸功於在Wonderful.as文件中定義的同名instrinsic類。有一件事情須要清楚的是,如果使用instrinsic類這種方式的話,在你原有類的定義中必須使用var關鍵字。否則就會有錯誤出現,因爲編譯器會認爲你事實上正在使用一個已經存在的instrinsic類,而不是正在創建一個新的類。

MX 2004的組建也需要Intrinsic 類,因爲新一代的組建在他們使用之前已經被編譯。Intrinsic類給編譯器一些信息,它需要一些組件內部已經包含的信息,這樣當你在你的Movie中使用了一個組件時它可以檢查它的用法已經數據類型是否匹配。instrinsic類並沒有被編譯到swc文件中,instrinsic類只是一些定義,並沒有一些實質性的代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章