【问题标题】:AS3 iterating through class variablesAS3 遍历类变量
【发布时间】:2012-11-09 02:38:24
【问题描述】:

如何遍历类实例的所有变量? 它似乎适用于常规对象...

已编辑:这样就可以了 =)

var test:anyClass=new anyClass();
var someObject:Object={val1:"object string",val2:111,val3:new Date()};
var xmlList:XMLList=describeType(anyClass)..variable;
for each(var key:* in someObject)
    trace(String(key));
for each(var item:XML in xmlList)
    trace(String(test[item.@name]));

输出: 对象字符串 111 2012 年 11 月 8 日星期四 11:19:27 GMT-0700 类字符串 222 2012 年 11 月 8 日星期四 11:19:27 GMT-0700

public class anyClass
{
    public var val1:String="class string";
    public var val2:int=222;
    public var val3:Date=new Date();
}

【问题讨论】:

标签: actionscript-3


【解决方案1】:

我认为最简单的方法是使用flash.utils.describeType()

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType()

这将返回一个描述类的所有细节的 XML 文档,然后您可以使用普通 E4X 对其进行攻击。这是我测试过的一个例子:

import flash.display.Sprite;
import flash.utils.describeType;

var test:String = "TEST";

function DescribeTypeExample():void {
    var child:Sprite = new Sprite();
    var description:XML = describeType(this);
    var variables:XMLList = description..variable;
    for each(var variable:XML in variables) {
        trace("VARIABLE: " + variable.@name);
        trace("VALUE: " + this[variable.@name]);
    }
}

this.DescribeTypeExample();

// Output:

// VARIABLE: test
// VALUE: TEST

【讨论】:

  • 哦,很好,我已经看到了,但我虽然,“也许这个机构真的很有必要”。原来我错了......我在可绑定 ArrayCollection 中的项目上使用它,所以访问器为我做了。
  • 我意识到一个普通的 Sprite 没有任何变量(D'oh!)所以改成另一个例子,我已经测试过了。如果访问器对您有用,那就太好了。
  • 嘿,伙计们,我无法检索非动态类的变量有没有办法做到这一点?
  • @freezing_ 如果您发布问题而不是评论,您更有可能得到答案。通过一些示例代码展示您正在尝试做的事情以及为什么它不起作用 - 肯定会有人提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 2012-08-20
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
相关资源
最近更新 更多