繁体   English   中英

类引用与类实例的区别

[英]Difference Between Class Reference And Class Instance

鉴于这两个对getQualifiedClassName的调用都返回相同的东西(mx:Label),如何以编程方式区分类的实例和类的引用...

    var lab1:Label=new Label();
    var lab2:Class=Label;
    var qcn1:String=getQualifiedClassName(lab1);
    var qcn2:String=getQualifiedClassName(lab2);

换句话说,我怎么知道lab1是Label类型,而lab2是类型“Class”。

typeof()只为两者返回“object”... getQualifiedClassName为两者返回“mx.controls :: Label”...

我该用什么?

is运营商:

>>> lab1 is Label
true
>>> lab1 is Class
false
>>> lab2 is Label
false
>>> lab2 is Class
true

另外(尽管这应该是真的) lab2 == Label

trace(Sprite是Class); //真的
trace(new Sprite()是Class); //假

为了在将来更详细地测试事物,您可以随时使用

import flash.utils.describeType;

trace(describeType(new Label()));
trace(describeType(Label));

这将为您提供2个XML输出。 在这里,您将能够清楚地看到差异。 我在这里为Point类提供了2,因为与DisplayObjects和任何扩展它们的类相比,point是一个相对简单的类。

实例。

<type name="flash.geom::Point" base="Object" isDynamic="false" isFinal="false" isStatic="false">
  <extendsClass type="Object"/>
  <constructor>
    <parameter index="1" type="Number" optional="true"/>
    <parameter index="2" type="Number" optional="true"/>
  </constructor>
  <variable name="x" type="Number"/>
  <variable name="y" type="Number"/>
  <accessor name="length" access="readonly" type="Number" declaredBy="flash.geom::Point"/>
  <method name="clone" declaredBy="flash.geom::Point" returnType="flash.geom::Point"/>
  <method name="add" declaredBy="flash.geom::Point" returnType="flash.geom::Point">
    <parameter index="1" type="flash.geom::Point" optional="false"/>
  </method>
  <method name="equals" declaredBy="flash.geom::Point" returnType="Boolean">
    <parameter index="1" type="flash.geom::Point" optional="false"/>
  </method>
  <method name="subtract" declaredBy="flash.geom::Point" returnType="flash.geom::Point">
    <parameter index="1" type="flash.geom::Point" optional="false"/>
  </method>
  <method name="normalize" declaredBy="flash.geom::Point" returnType="void">
    <parameter index="1" type="Number" optional="false"/>
  </method>
  <method name="offset" declaredBy="flash.geom::Point" returnType="void">
    <parameter index="1" type="Number" optional="false"/>
    <parameter index="2" type="Number" optional="false"/>
  </method>
  <method name="toString" declaredBy="flash.geom::Point" returnType="String"/>
</type>

<type name="flash.geom::Point" base="Class" isDynamic="true" isFinal="true" isStatic="true">
  <extendsClass type="Class"/>
  <extendsClass type="Object"/>
  <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
  <method name="polar" declaredBy="flash.geom::Point" returnType="flash.geom::Point">
    <parameter index="1" type="Number" optional="false"/>
    <parameter index="2" type="Number" optional="false"/>
  </method>
  <method name="interpolate" declaredBy="flash.geom::Point" returnType="flash.geom::Point">
    <parameter index="1" type="flash.geom::Point" optional="false"/>
    <parameter index="2" type="flash.geom::Point" optional="false"/>
    <parameter index="3" type="Number" optional="false"/>
  </method>
  <method name="distance" declaredBy="flash.geom::Point" returnType="Number">
    <parameter index="1" type="flash.geom::Point" optional="false"/>
    <parameter index="2" type="flash.geom::Point" optional="false"/>
  </method>
  <factory type="flash.geom::Point">
    <extendsClass type="Object"/>
    <constructor>
      <parameter index="1" type="Number" optional="true"/>
      <parameter index="2" type="Number" optional="true"/>
    </constructor>
    <variable name="x" type="Number"/>
    <variable name="y" type="Number"/>
    <accessor name="length" access="readonly" type="Number" declaredBy="flash.geom::Point"/>
    <method name="clone" declaredBy="flash.geom::Point" returnType="flash.geom::Point"/>
    <method name="add" declaredBy="flash.geom::Point" returnType="flash.geom::Point">
      <parameter index="1" type="flash.geom::Point" optional="false"/>
    </method>
    <method name="equals" declaredBy="flash.geom::Point" returnType="Boolean">
      <parameter index="1" type="flash.geom::Point" optional="false"/>
    </method>
    <method name="subtract" declaredBy="flash.geom::Point" returnType="flash.geom::Point">
      <parameter index="1" type="flash.geom::Point" optional="false"/>
    </method>
    <method name="normalize" declaredBy="flash.geom::Point" returnType="void">
      <parameter index="1" type="Number" optional="false"/>
    </method>
    <method name="offset" declaredBy="flash.geom::Point" returnType="void">
      <parameter index="1" type="Number" optional="false"/>
      <parameter index="2" type="Number" optional="false"/>
    </method>
    <method name="toString" declaredBy="flash.geom::Point" returnType="String"/>
  </factory>
</type>

主要区别是base="Object"base="Class" ,并且Class 1还有一个<factory />节点。 有明显的差异,但这些通常是我最关注的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM