Apache flex 如何知道对象在AS3中是否是动态的

Apache flex 如何知道对象在AS3中是否是动态的,apache-flex,flash,actionscript-3,oop,dynamic,Apache Flex,Flash,Actionscript 3,Oop,Dynamic,在ActionScript3中,您可以编写一个定义动态对象的类(MovieClip和object是两个示例),这些对象可以在运行时修改。我想知道的是,是否有某种方法(当然是在运行时)可以知道某个对象是否是动态的 PS:不做这样的事情: function isDynamic(object) { try { object.newProperty = 'someValue' } catch (e) { return false } ret

在ActionScript3中,您可以编写一个定义动态对象的类(MovieClip和object是两个示例),这些对象可以在运行时修改。我想知道的是,是否有某种方法(当然是在运行时)可以知道某个对象是否是动态的

PS:不做这样的事情:

function isDynamic(object) {
    try {
        object.newProperty = 'someValue'
    } catch (e) {
        return false
    }
    return true
}
function isDynamic(object) : Boolean
{
    var type:XML = describeType(object);
    return type.@isDynamic.toString() == "true";
}

您可以使用flash.utils中的DescripteType以XML形式描述对象。以下是对API的参考:


Cookieoffort的想法是正确的,但不幸的是代码本身存在问题,isDynamic是一个属性,返回的值将是一个XMLList,其值为反映真值或假值的字符串,而不是直接返回布尔值的子节点。它应该更像这样:

function isDynamic(object) {
    try {
        object.newProperty = 'someValue'
    } catch (e) {
        return false
    }
    return true
}
function isDynamic(object) : Boolean
{
    var type:XML = describeType(object);
    return type.@isDynamic.toString() == "true";
}
小心

任何时候,如果您想使用describeType()函数,请使用变体:

import mx.utils.DescribeTypeCache;
var typeDesc:XML = DescribeTypeCache.describeType(object).typeDescription;

重复调用运行时反射机制的性能绝对糟糕。这就是Adobe发明DescribeTypeCache类的原因。

这是一篇非常古老的文章,但我将为未来的搜索者添加一个选项

AS3有一个内置的实现方法:

mx.utils.ObjectUtil.isDynamicObject(yourObject);

阅读更多信息。

“如果(type.isDynamic)返回true”。我认为这可以通过“return type.isDynamic”来实现,但是如果您想要测试动态,以避免调用describeType怎么办。。叹气。正如我们在isDynamicObject中看到的,使用try…catch