Разница между ссылкой на класс и экземпляром класса - PullRequest
2 голосов
/ 28 июня 2010

Учитывая, что оба этих вызова 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 :: Label» для обоих ...

Что мне использовать?

Ответы [ 3 ]

9 голосов
/ 28 июня 2010

Оператор is:

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

Также (хотя это должно быть тривиально верно) lab2 == Label.

1 голос
/ 28 сентября 2011

Чтобы проверить вещи более подробно в будущем, вы всегда можете использовать

import flash.utils.describeType;

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

Это даст вам 2 XML выходов. Здесь вы сможете четко увидеть разницу. Я предоставил вам 2 для класса Point, поскольку point - это относительно простой класс по сравнению с DisplayObjects и любым классом, который расширяет их.

Instance.

<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", а также класс 1 имеет узел <factory />. Очевидно, что есть больше различий, но обычно это те части, на которых я концентрируюсь больше всего.

1 голос
/ 03 июля 2010

трассировка (Sprite - это класс); // true
трассировка (новый Sprite () является классом); // false

...