2010-06-28 123 views
2

鉴于对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()只返回 “对象” 两个...的getQualifiedClassName回报 “为mx.controls ::标签” 两个...

我应该使用什么?

回答

9

is操作:

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

而且(虽然这应该是平凡的真)lab2 == Label

1

trace(Sprite is Class); // true
trace(new Sprite()is Class); //假

1

为了测试在未来更多的细节的东西,你可以随时使用

import flash.utils.describeType; 

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

这会给你2个XML输出。在这里你将能够清楚地看到差异。 我在这里为你提供了Point这个类,因为与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 />节点。显然有更多的差异,但这些通常是我最关注的部分。