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

时间:2009-04-14 17:50:49

标签: flex flash actionscript-3 oop dynamic

在Action Script 3中,您可以编写一个定义动态对象的类(MovieClip和Object是两个示例),可以在运行时修改此对象。我想知道是否有某种方式(当然是在运行时)知道某个对象是否是动态的。

PS:没有做这样的事情:

function isDynamic(object) {
    try {
        object.newProperty = 'someValue'
    } catch (e) {
        return false
    }
    return true
}

4 个答案:

答案 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