我有一个我创建的动态类
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。
如何迭代所有属性名称而不仅仅是动态添加的属性?
答案 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));
这应该可以为您提供整个对象。