假设我有一个看起来像这样的课程:
public class MyClass
{
public var attribute1;
public var attribute2;
}
我想将attribute1和attribute2作为字符串。我试过这个:
var test:MyClass = new MyClass();
for (var key:String in test)
{
trace(test[key]);
}
但它不起作用,它永远不会进入循环。我怎么能做我想做的事?
由于
答案 0 :(得分:3)
for..in循环仅枚举动态添加的属性。声明的变量和类的方法不在for..in循环中枚举。这意味着ActionScript API中的大多数类都不会在for..in循环中显示任何属性。
对于解决方案,请阅读:
http://livedocs.adobe.com/flex/3/html/help.html?content=usingas_8.html
答案 1 :(得分:0)
你需要使用AS反射/内省 本机方式是使用describeType函数,如下所示:
public function getDetails():void {
var classInfo:XML = describeType(button1);
// List the class name.
ta1.text = "Class " + classInfo.@name.toString() + "\n";
// List the object's variables, their values, and their types.
for each (var v:XML in classInfo..variable) {
ta1.text += "Variable " + v.@name + "=" + button1[v.@name] +
" (" + v.@type + ")\n";
}
}
(来自flex doc:http://livedocs.adobe.com/flex/3/html/help.html?content=usingas_8.html)
我不确定,但我认为类mx.utils.ObjectUtil可以使它更简单。它仍然是原生的方式。
另一种选择是使用库来简化它 看一下:http://www.as3commons.org/as3-commons-reflect/introduction.html