有没有办法判断一个对象是一个类还是一个对象?

时间:2015-07-02 11:16:06

标签: actionscript-3 flash

有没有办法判断对象是类还是类的实例?这看起来是否正确:

if (object is Class) {
    return "[class " + getQualifiedClassName(value) + "]";
}
else if (object is Object) {
    return "[object " + getQualifiedClassName(value) + "]";
}

似乎这可能无法捕捉到所有情况。

更新
以下是我使用的功能:

    /**
     * Get string value of an object if value is not simple. For primitives the value is not changed. 
     * For class objects, "[class ClassName]" is returned. 
     * For objects, "[object ClassName]" is returned.
     * */
    public static function getStringValue(value:*):* {
        if (ObjectUtil.isSimple(value)) {
            return value;
        }
        else if (value is Class) {
            return "[class " + getQualifiedClassName(value) + "]";
        }

        return "[object " + getQualifiedClassName(value) + "]";
    }

2 个答案:

答案 0 :(得分:3)

首先,我认为这可能是使用var o:MyClass = new MyClass(); var m:MovieClip = new MovieClip(); trace(String(MyClass)); // gives : [class MyClass] trace(String(o)); // gives : [object MyClass] trace(String(MovieClip)); // gives : [class MovieClip] trace(String(m)); // gives : [object MovieClip] 最简单的方法:

trace(describeType(o));

// gives : 
//  <type name="MyClass" base="Object" isDynamic="false" isFinal="false" isStatic="false">
//      <extendsClass type="Object"/>
//  </type> 

trace(describeType(MyClass));

// gives : 
//  <type name="MyClass" base="Class" isDynamic="true" isFinal="true" isStatic="true">
//      <extendsClass type="Class"/>
//      <extendsClass type="Object"/>
//      <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
//      <factory type="MyClass">
//          <extendsClass type="Object"/>
//      </factory>
//  </type>

更确切地说,我认为您可以使用flash.utils.describeType()

update MyTable set MyField = LEFT(MyField, 255):

ALTER TABLE MyTable ALTER COLUMN MyField TEXT(255);

希望可以提供帮助。

答案 1 :(得分:2)

if (object is Class)确实会测试对象是否是一个类,但它也是一个Object,因为Class是Object的子类。 所以你的第二次测试是不必要的,因为任何非null都是一个Object。