通过AS3中的String访问属性

时间:2011-05-01 22:50:39

标签: actionscript-3 properties

我有一个我后来创建的引擎,它根据XML数据将对象加载到容器中。一个非常简单的XML示例如下:

<level>
    <object cname="enemies.Robot">
        <pos x="200" y="400" layer="mobiles" />
    </object>
    <object cname="Player">
        <pos x="12" y="89" layer="mobiles" />
    </object>
</level>

我有一个类环境,它有一个方法 loadLevel(data:XML)我解析XML,然后该函数通过XML查找所有 object 节点并使用 getDefinitionByName 根据对象确定要创建的对象。@ cname

从这里开始,我必须根据XML手动定义每个属性;

obj.x = xml.pos.@x;
obj.y = xml.pos.@y;

我想知道是否有基于String设置属性的内置方法。我的意思是这样的:

var mc:MovieClip = new MovieClip();
mc.someInbuiltFunctionThatSetsAProperty("alpha", 0.5);

这样我可以将我的XML更改为更像:

<object cname="Player">
    <props>
        <x>200</x>
        <y>221</y>
        <alpha>7834</alpha>

        <health>Something</health>
        <power>3</power>
    </props>
</object>

遍历道具的所有孩子,即时设置我的所有属性。

我知道如果我创建一个对象并在其中设置属性:

var obj:Object = 
{
    var1: "hello",
    var2: "there",
    name: "marty"
};

然后您可以使用for(String in Object)循环遍历名称/值,如下所示:

var i:String;
for(i in obj)
{
    trace(i + ": " + obj[i]);
}

/**
 * Output:
 * var1: hello
 * var2: there
 * name: marty
 */

是否有可能与此类似的东西?

当然有一种方法,因为这是使用String识别属性的一个例子:

var ar:Array = [new MovieClip(), new MovieClip()];
ar.sortOn("alpha", Array.ASCENDING);

所以只是为了让我的问题更加重要:我希望能够获得并设置我可以使用String识别的属性。

2 个答案:

答案 0 :(得分:10)

为什么不使用["string property"]表示法:

var mc:MovieClip=new MovieClip()
mc["alpha"] = 0.5            // setter
var alpha:Number=mc["alpha"] // getter

答案 1 :(得分:1)

我不太清楚你正在寻找的是什么,但我对你所得到的内容有一般意识,并为你提出一些建议。首先,查看AS3语言参考中Object类的文档。请特别注意propertyIsEnumerable()setPropertyIsEnumerable()方法。我想这就是你要问的问题。

如果没有,您可能需要查看动态类的行为,这样您就可以动态地向对象添加变量。