使用as3中的getDefinitionByName函數(shù)實現(xiàn)拼寫類并動態(tài)創(chuàng)建類的實例
使用as3中的getDefinitionByName函數(shù)實現(xiàn)動態(tài)拼寫類并動態(tài)創(chuàng)建類的實例
public function getDefinitionByName(name:String):Object
返回參數(shù) name 中指定的類引用
參數(shù) name:String - 類名稱
返回 Object - 返回參數(shù) name 中指定的類引用
錯誤 ReferenceError - 找不到參數(shù) name 對應的公共定義as3中的getDefinitionByName函數(shù)是 返回 name 參數(shù)指定的類的類對象引用。
這樣就可以使用這個方法根據(jù)已知類的路徑的字符串來獲取類的類對象引用。這樣就可以利用這個特性讓flash動態(tài)創(chuàng)建類的實例...
但問題是:
1. 使用getDefinitionByName方法獲得的類必須是在發(fā)布的時候被編譯到swf文中的,否則就會報錯:"ReferenceError: Error #1065: 變量 <類的名字> 未定義。"
2. 由于使用import導入的類(只是作為查找類的路徑)并不會在發(fā)布swf的時候被編譯進去(當然flash.*包里面的類本身就是player中的),只用在代碼中使用到的類才會被編譯進去...
那么,要使用這個方法來實現(xiàn)動態(tài)執(zhí)行怎么辦? 只有把可能需要的所有類包含在代碼中(比如在定義變量的類型聲名時使用 *),并且在開始聲名此類,聲名時可以隨便使用個名字,這樣才能使用getDefinitionByName方法...
實際上getDefinitionByName所獲得的類名就是前面你所做的聲名的名字引用//-------------------------------------------------
import com.ooph.parser.*;
//包內有ParserWeb類
var ss:ParserWeb;
//在此處聲名ParserWeb類,名為ss(名字不用與下面實例名的相同)
var sortStr:String="Web";
var P:Class = getDefinitionByName("com.ooph.parser.Parser"+sortStr) as Class;
//注意這里要寫完整的類路徑 "com.ooph.parser.Parser"+sortStr
var newParser:* = new P();
posted on 2008-08-07 20:26 vinny 閱讀(1527) 評論(0) 編輯 收藏 所屬分類: Flex