类引用与类实例的区别

时间:2010-06-28 00:03:24

标签: flex flash actionscript-3 actionscript air

鉴于这两个对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”...

我该使用什么?

3 个答案:

答案 0 :(得分:9)

is运算符:

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

要在将来更详细地测试内容,您可以随时使用

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",而且第一类也有<factory />个节点。有很多差异,但这些差异通常是我最关注的部分。