通过AS3中的字符串访问属性

| 我有一个创建了一段时间的引擎,该引擎根据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>
我有一个类Environment,它具有方法loadLevel(data:XML),我通过该方法解析XML,然后该函数在XML中运行,找到所有对象节点,并使用getDefinitionByName确定要基于object。@ 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\"
};
然后可以使用using5ѭ循环遍历名称/值,如下所示:
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 property\"]
表示法:
var mc:MovieClip=new MovieClip()
mc[\"alpha\"] = 0.5            // setter
var alpha:Number=mc[\"alpha\"] // getter
    
我不太清楚您要寻找的是什么,但是我对您正在寻找的东西有一个大致的了解,并为您提供一些建议。首先,查看《 AS3语言参考》中有关Object类的文档。专门查看
propertyIsEnumerable()
setPropertyIsEnumerable()
方法。我认为这就是您要问的问题。 如果不是这样,您可能希望研究动态类的行为,该动态类使您可以动态地向对象添加变量。     

要回复问题请先登录注册