介紹:
getDefinitionByName是flash.utils下面的,屬于工具包類。正如函數名稱是通過Name來獲得該名稱所對應的類對象,意思就是說通過一個類的名稱能夠獲取到該類對象,從而通過該類對象聲明一個該類的實例對象。注意該函數中的參數name=類路徑+類名稱。
實例:
var btncls:Class = getDefinitionByName("mx.controls.Button") as Class ;
var myBtn:Object = new btncls() ;
myBtn.label = "我是通過名字獲得類實例聲明出來的BTN" ;
this.addChild( myBtn as DisplayObject ) ;
應用:
現在在flex里面要用到在flash cs3 設計一批元件,當然可以通過導出元件的swc然后添加到工程下面的libs下,當需要在flex里面把這些若干元件當成庫來獲取庫中的單個元素時,我們就可以通過geDefinitionByName函數來實現,具體實現步驟為下:
第一:在flash cs3中準備好若干個元件,并為元件添加鏈接名稱(最好鏈接名稱和元件名稱一樣)。然后在場景的第一幀里面添加代碼如下:
function getClassByName(cname:String):Class //cname即為元件的鏈接名稱。
{
var mc:Class = getDefinitionByName(cname) as Class;
return mc;
}
然后生成swf。
第二:將swf文件放入工程中,用loader將swf文件導入到程序中。在loader導入成功(觸發Event.Complete事件)后,loader.content即為swf。然后訪問對象的getClassByName()來獲取swf中的元件。存入庫中,以備后用。
代碼如下:
var nameArr:Array = ["燭光","菊花"] ;
var mcArr:Array = new Array() ;
function init():void
{
var loader:Loader = new Loader() ;
loader.contentLoaderInfo.addEventLinstener( Event.COMPLETE , onComplete ) ;
loader.load(new URLRequest("assets/firelib.swf")) ;
}
function onComplete(evnet:Event):void
{
for(var i:uint=0 ; i<nameArr.length ; i++)
{
var cls:Class = Object( event.target.content).getClassByName(nameArr[i]) ;//getClassByName()即為swf場景中定義的函數。
mcArr.push( { name:nameArr[i] , content:new cls() } ) ;
}
}
延伸:
getQualifiedClassName(value:*)String
根據一個對象返回該對象的包含完全限定類名稱的字符串。
getQualifiedSuperClassName(value:*)String
根據一個對象返回該對象的基類的完全限定類名的字符串。
在通過上面兩個方法得到一個完全限定類名稱之后,運用 getDefinitionByName()就可以將類名轉換成類應用。