在Action Script 3中,您可以编写一个定义动态对象的类(MovieClip和Object是两个示例),可以在运行时修改此对象。我想知道是否有某种方式(当然是在运行时)知道某个对象是否是动态的。
PS:没有做这样的事情:
function isDynamic(object) {
try {
object.newProperty = 'someValue'
} catch (e) {
return false
}
return true
}
答案 0 :(得分:7)
CookieOfFortune有正确的想法,但不幸的是代码本身有问题,isDynamic是一个属性,返回的值将是一个XMLList,其值为String,反映了true或false值,而不是直接的子节点返回一个布尔值。看起来应该更像这样:
function isDynamic(object) : Boolean
{
var type:XML = describeType(object);
return type.@isDynamic.toString() == "true";
}
答案 1 :(得分:3)
您可以使用flash.utils中的describeType来描述XML格式的对象。以下是对API的引用:flash.utils.describeType
function isDynamic(object) {
var type:XML = describeType(object);
if (type.@isDynamic == "true") return true;
return false;
}
答案 2 :(得分:3)
小心!
无论何时你想使用describeType()函数,请 请 使用变体:
import mx.utils.DescribeTypeCache;
var typeDesc:XML = DescribeTypeCache.describeType(object).typeDescription;
重复调用运行时反射机器的性能绝对 suck 。这就是Adobe发明DescribeTypeCache类的原因。
答案 3 :(得分:2)
这是一篇非常古老的帖子,但我会为未来的搜索者添加一个选项。
AS3有这样做的内置方式:
mx.utils.ObjectUtil.isDynamicObject(yourObject);
详细了解here。