getDefinitionByName巧妙应用

介绍:

     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()就可以将类名转换成类应用。

转载于:https://my.oschina.net/ym1983/blog/868195

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值