有没有办法判断一个对象是 class 还是一个对象?
Is there a way to tell if an object is a class or an object?
有没有办法判断一个对象是 class 还是 class 的实例?这看起来正确吗:
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) + "]";
}
if (object is Class)
确实会测试对象是否是 class,但它也是一个对象,因为 Class 是对象的子class。
所以你的第二个测试是不必要的,因为任何不为 null 的东西都是一个对象。
首先,我认为最简单的方法可能是使用 String()
:
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]
更确定的是,我认为您可以使用 flash.utils.describeType()
:
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>
希望能帮到你。
有没有办法判断一个对象是 class 还是 class 的实例?这看起来正确吗:
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) + "]";
}
if (object is Class)
确实会测试对象是否是 class,但它也是一个对象,因为 Class 是对象的子class。
所以你的第二个测试是不必要的,因为任何不为 null 的东西都是一个对象。
首先,我认为最简单的方法可能是使用 String()
:
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]
更确定的是,我认为您可以使用 flash.utils.describeType()
:
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>
希望能帮到你。