zoukankan      html  css  js  c++  java
  • describeType的使用

    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(类名)即可获得到该类的所有相关信息

    <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的示例代码:
    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
    {

    }

    }
    }

  • 相关阅读:
    GridView使用CommandField删除列实现删除时提示确认框
    Web开发-表单验证
    GridView使用CommandField删除列实现删除时提示确认框
    c#中的delegate(委托)和event(事件)
    Asp.Net中的三种分页方式
    java数组,遍历数组
    Java循环结构
    java选择结构
    易混运算符
    局部变量与成员变量
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/2203412.html
Copyright © 2011-2022 走看看