前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >describeType的使用

describeType的使用

作者头像
meteoric
发布2018-11-16 15:26:38
3810
发布2018-11-16 15:26:38
举报
文章被收录于专栏:游戏杂谈

describeType函数在adobe官方在线文档上的定义如下:生成描述ActionScript对象(命令为方法的参数)的XML对象,此方法实现ActionScript语言的反射编程概念。

这个方法的应用场景可能是这样的:

定义一个方法,解析很多邮件的消息,很多消息的内容格式又是一致的(需要实现方法的共用),那么定义下面一系列的方法了。

public function parseEmail_1():void {}

public function parseEmail_2_3_4_5():void {}

public function parseEmail_10_11_12():void {}

如何根据邮件格式的消息,直接就调用了相应的函数?那首先需要有一个对象存储了该类的所有方法,然后查找到包含此id的方法,之后调用它即可。

示例:

建立一个名为“describeType_Test”的ActionScript工程。使用describeType(类名)即可获得到该类的所有相关信息

代码语言:javascript
复制
<type name="describeType_Test" base="Class" isDynamic="true" isFinal="true" isStatic="true">
  <extendsClass type="Class"/>
  <extendsClass type="Object"/>
  <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
  <factory type="describeType_Test">
    <extendsClass type="flash.display::Sprite"/>
    <extendsClass type="flash.display::DisplayObjectContainer"/>
    <extendsClass type="flash.display::InteractiveObject"/>
    <extendsClass type="flash.display::DisplayObject"/>
    <extendsClass type="flash.events::EventDispatcher"/>
    <extendsClass type="Object"/>
    <implementsInterface type="flash.events::IEventDispatcher"/>
    <implementsInterface type="flash.display::IBitmapDrawable"/>
    <accessor name="useHandCursor" access="readwrite" type="Boolean" declaredBy="flash.display::Sprite"/>
    <accessor name="root" access="readonly" type="flash.display::DisplayObject" declaredBy="flash.display::DisplayObject"/>
    <accessor name="stage" access="readonly" type="flash.display::Stage" declaredBy="flash.display::DisplayObject"/>
    <accessor name="mask" access="readwrite" type="flash.display::DisplayObject" declaredBy="flash.display::DisplayObject"/>
    <accessor name="width" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="visible" access="readwrite" type="Boolean" declaredBy="flash.display::DisplayObject"/>
    <accessor name="alpha" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="height" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="mouseY" access="readonly" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="rotation" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="mouseX" access="readonly" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="mouseEnabled" access="readwrite" type="Boolean" declaredBy="flash.display::InteractiveObject"/>
    <accessor name="tabIndex" access="readwrite" type="int" declaredBy="flash.display::InteractiveObject"/>
    <accessor name="doubleClickEnabled" access="readwrite" type="Boolean" declaredBy="flash.display::InteractiveObject"/>
    <accessor name="focusRect" access="readwrite" type="Object" declaredBy="flash.display::InteractiveObject"/>
    <accessor name="y" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="cacheAsBitmap" access="readwrite" type="Boolean" declaredBy="flash.display::DisplayObject"/>
    <accessor name="x" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="opaqueBackground" access="readwrite" type="Object" declaredBy="flash.display::DisplayObject"/>
    <accessor name="accessibilityImplementation" access="readwrite" type="flash.accessibility::AccessibilityImplementation" declaredBy="flash.display::InteractiveObject">
      <metadata name="Inspectable">
        <arg key="environment" value="none"/>
      </metadata>
    </accessor>
    <accessor name="scrollRect" access="readwrite" type="flash.geom::Rectangle" declaredBy="flash.display::DisplayObject"/>
    <accessor name="filters" access="readwrite" type="Array" declaredBy="flash.display::DisplayObject"/>
    <accessor name="blendMode" access="readwrite" type="String" declaredBy="flash.display::DisplayObject"/>
    <accessor name="transform" access="readwrite" type="flash.geom::Transform" declaredBy="flash.display::DisplayObject"/>
    <accessor name="name" access="readwrite" type="String" declaredBy="flash.display::DisplayObject"/>
    <accessor name="scale9Grid" access="readwrite" type="flash.geom::Rectangle" declaredBy="flash.display::DisplayObject"/>
    <accessor name="loaderInfo" access="readonly" type="flash.display::LoaderInfo" declaredBy="flash.display::DisplayObject"/>
    <accessor name="accessibilityProperties" access="readwrite" type="flash.accessibility::AccessibilityProperties" declaredBy="flash.display::DisplayObject"/>
    <accessor name="contextMenu" access="readwrite" type="flash.ui::ContextMenu" declaredBy="flash.display::InteractiveObject"/>
    <accessor name="soundTransform" access="readwrite" type="flash.media::SoundTransform" declaredBy="flash.display::Sprite"/>
    <accessor name="parent" access="readonly" type="flash.display::DisplayObjectContainer" declaredBy="flash.display::DisplayObject"/>
    <accessor name="numChildren" access="readonly" type="int" declaredBy="flash.display::DisplayObjectContainer"/>
    <accessor name="dropTarget" access="readonly" type="flash.display::DisplayObject" declaredBy="flash.display::Sprite"/>
    <accessor name="tabEnabled" access="readwrite" type="Boolean" declaredBy="flash.display::InteractiveObject"/>
    <accessor name="hitArea" access="readwrite" type="flash.display::Sprite" declaredBy="flash.display::Sprite"/>
    <accessor name="scaleX" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="graphics" access="readonly" type="flash.display::Graphics" declaredBy="flash.display::Sprite"/>
    <accessor name="scaleY" access="readwrite" type="Number" declaredBy="flash.display::DisplayObject"/>
    <accessor name="textSnapshot" access="readonly" type="flash.text::TextSnapshot" declaredBy="flash.display::DisplayObjectContainer"/>
    <accessor name="buttonMode" access="readwrite" type="Boolean" declaredBy="flash.display::Sprite"/>
    <accessor name="tabChildren" access="readwrite" type="Boolean" declaredBy="flash.display::DisplayObjectContainer"/>
    <accessor name="mouseChildren" access="readwrite" type="Boolean" declaredBy="flash.display::DisplayObjectContainer"/>
    <method name="swapChildren" declaredBy="flash.display::DisplayObjectContainer" returnType="void">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
      <parameter index="2" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="startDrag" declaredBy="flash.display::Sprite" returnType="void">
      <parameter index="1" type="Boolean" optional="true"/>
      <parameter index="2" type="flash.geom::Rectangle" optional="true"/>
    </method>
    <method name="stopDrag" declaredBy="flash.display::Sprite" returnType="void"/>
    <method name="removeEventListener" declaredBy="flash.events::EventDispatcher" returnType="void">
      <parameter index="1" type="String" optional="false"/>
      <parameter index="2" type="Function" optional="false"/>
      <parameter index="3" type="Boolean" optional="true"/>
    </method>
    <method name="parseEmail_13_14_1115" declaredBy="describeType_Test" returnType="void"/>
    <method name="addEventListener" declaredBy="flash.events::EventDispatcher" returnType="void">
      <parameter index="1" type="String" optional="false"/>
      <parameter index="2" type="Function" optional="false"/>
      <parameter index="3" type="Boolean" optional="true"/>
      <parameter index="4" type="int" optional="true"/>
      <parameter index="5" type="Boolean" optional="true"/>
    </method>
    <method name="parseEmail_10_101_112" declaredBy="describeType_Test" returnType="void"/>
    <method name="parseEmail_2" declaredBy="describeType_Test" returnType="void"/>
    <method name="willTrigger" declaredBy="flash.events::EventDispatcher" returnType="Boolean">
      <parameter index="1" type="String" optional="false"/>
    </method>
    <method name="dispatchEvent" declaredBy="flash.events::EventDispatcher" returnType="Boolean">
      <parameter index="1" type="flash.events::Event" optional="false"/>
    </method>
    <method name="hasEventListener" declaredBy="flash.events::EventDispatcher" returnType="Boolean">
      <parameter index="1" type="String" optional="false"/>
    </method>
    <method name="parseEmail_3" declaredBy="describeType_Test" returnType="void"/>
    <method name="toString" declaredBy="flash.events::EventDispatcher" returnType="String"/>
    <method name="parseEmail_1" declaredBy="describeType_Test" returnType="void"/>
    <method name="globalToLocal" declaredBy="flash.display::DisplayObject" returnType="flash.geom::Point">
      <parameter index="1" type="flash.geom::Point" optional="false"/>
    </method>
    <method name="localToGlobal" declaredBy="flash.display::DisplayObject" returnType="flash.geom::Point">
      <parameter index="1" type="flash.geom::Point" optional="false"/>
    </method>
    <method name="getBounds" declaredBy="flash.display::DisplayObject" returnType="flash.geom::Rectangle">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="addChildAt" declaredBy="flash.display::DisplayObjectContainer" returnType="flash.display::DisplayObject">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
      <parameter index="2" type="int" optional="false"/>
    </method>
    <method name="getRect" declaredBy="flash.display::DisplayObject" returnType="flash.geom::Rectangle">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="removeChild" declaredBy="flash.display::DisplayObjectContainer" returnType="flash.display::DisplayObject">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="addChild" declaredBy="flash.display::DisplayObjectContainer" returnType="flash.display::DisplayObject">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="removeChildAt" declaredBy="flash.display::DisplayObjectContainer" returnType="flash.display::DisplayObject">
      <parameter index="1" type="int" optional="false"/>
    </method>
    <method name="contains" declaredBy="flash.display::DisplayObjectContainer" returnType="Boolean">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="hitTestObject" declaredBy="flash.display::DisplayObject" returnType="Boolean">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="getChildIndex" declaredBy="flash.display::DisplayObjectContainer" returnType="int">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
    </method>
    <method name="hitTestPoint" declaredBy="flash.display::DisplayObject" returnType="Boolean">
      <parameter index="1" type="Number" optional="false"/>
      <parameter index="2" type="Number" optional="false"/>
      <parameter index="3" type="Boolean" optional="true"/>
    </method>
    <method name="setChildIndex" declaredBy="flash.display::DisplayObjectContainer" returnType="void">
      <parameter index="1" type="flash.display::DisplayObject" optional="false"/>
      <parameter index="2" type="int" optional="false"/>
    </method>
    <method name="getChildByName" declaredBy="flash.display::DisplayObjectContainer" returnType="flash.display::DisplayObject">
      <parameter index="1" type="String" optional="false"/>
    </method>
    <method name="getChildAt" declaredBy="flash.display::DisplayObjectContainer" returnType="flash.display::DisplayObject">
      <parameter index="1" type="int" optional="false"/>
    </method>
    <method name="parseEmail_4_5_6_7" declaredBy="describeType_Test" returnType="void"/>
    <method name="getObjectsUnderPoint" declaredBy="flash.display::DisplayObjectContainer" returnType="Array">
      <parameter index="1" type="flash.geom::Point" optional="false"/>
    </method>
    <method name="areInaccessibleObjectsUnderPoint" declaredBy="flash.display::DisplayObjectContainer" returnType="Boolean">
      <parameter index="1" type="flash.geom::Point" optional="false"/>
    </method>
    <method name="swapChildrenAt" declaredBy="flash.display::DisplayObjectContainer" returnType="void">
      <parameter index="1" type="int" optional="false"/>
      <parameter index="2" type="int" optional="false"/>
    </method>
  </factory>
</type>

这样,只需要获取到该xml对象下的所有method节点,然后遍历它,匹配到包含该邮件格式id的方法,使用split将方法名分隔开:parseEmail、1、2、…,第一位则为方法名,之后的便是该方法可以解析的指定格式的id,调用this[funName](paras..);

as的示例代码:

代码语言:javascript
复制
package
{
    import flash.display.Sprite;
    import flash.utils.describeType;
    import flash.utils.getDefinitionByName;
    import flash.utils.getQualifiedClassName;
    import flash.utils.getQualifiedSuperclassName;
    
    public class describeType_Test extends Sprite
    {
        public function describeType_Test()
        {
            //this [object describeType_Test]
            var clsStr:String = getQualifiedClassName(this);    //describeType_Test
            var supClsStr:String = getQualifiedSuperclassName(this);    //flash.display::Sprite
            
            var cls:Class = getDefinitionByName(clsStr) as Class;
            
            var xml:XML = describeType(cls);
            
            trace(xml);
        }
        
        public function parseEmail_1():void
        {
            
        }
        
        public function parseEmail_2():void
        {
            
        }
        
        public function parseEmail_3():void
        {
            
        }
        
        public function parseEmail_4_5_6_7():void
        {
            
        }
        
        public function parseEmail_10_101_112():void
        {
            
        }
        
        public function parseEmail_13_14_1115():void
        {
                
        }
            
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-10-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档