循环遍历actionscript中的对象属性名称

时间:2010-04-22 22:03:26

标签: flex actionscript-3 dynamic

我有一个我创建的动态类

public dynamic class SiteZoneFileUploadVO
{       
    public var destination:String = "sitezone";
    public var siteZoneId:uint;
    public var fileType:String;
    public var fileContents:String;

    public function SiteZoneFileUploadVO()
    {
    }

}

当我尝试迭代此对象的属性名称时,它只迭代动态添加的属性。

        parameters.dynVar= "value";

        for(var name:String in parameters) 
        {
            trace(name);
        }

即使对象的所有属性都等于某个值(我已在调试器中检查过),唯一将跟踪的属性名称是dynVar。

如何迭代所有属性名称而不仅仅是动态添加的属性?

3 个答案:

答案 0 :(得分:4)

您可以使用describeType()获取包含类的所有方法和变量的XML,然后过滤掉要迭代的属性(例如所有变量)并将它们存储在XMLList中。

下一步,您将遍历XMLList并在对象上使用方括号表示法按名称访问过滤后的属性。但是,您只能以这种方式访问​​公共属性,因为describeType()不会查看私有属性。

答案 1 :(得分:3)

如果您正在运行flex:

看了几篇文章,ObjectUtil.toString是最有希望的,然后看了它的flex源代码,它使用了另一种方法ObjectUtil.getClassInfo,这正是你所需要的。如果您只想要属性名称:

ObjectUtil.getClassInfo(myClass).properties

返回一个QName对象数组,每个对象都有一个localName属性,它将为每个属性名称提供一个字符串

答案 2 :(得分:0)

只需使用trace(ObjectUtil.toString(parameters));这应该可以为您提供整个对象。