ActionScript从其他对象属性设置对象属性?

时间:2010-06-25 23:15:04

标签: xml actionscript-3 dynamic properties

我正在尝试将对象的属性转换为另一个对象的实际属性。

这是我的对象变量:

var propObj:Object = {prop:"width", width:50};

现在我想使用该对象的属性来分配精灵的属性。

var sp:Sprite = new Sprite();
sp.(propObj.prop as Sprite.property) = propObj.width;

现在,我甚至不打算尝试,因为我知道编译器会在我脸上爆炸。但你应该能够看到我想要做的事情。

为什么我要这样做是因为我正在读取一个XML文件,其中包含特定对象的可用属性的未确定列表。因此,我没有编写类似于巨大的switch语句来评估XML文件是否具有该特定属性的值,而是尝试根据XML文件中的可用内容动态分配属性。

如果我想做的事情是可能的,那么最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

按照您的定义propObj,您可以执行以下操作:

var propObj:Object = {prop:"x", x:50};
var sp:Sprite = new Sprite();
sp[propObj.prop] = propObj.x;

现在,一个更通用,也许更有用的方法来做你想做的事情:

var props:Object = {x:10,y:50,unexistentProp:300};
for (var propName:String in props) {
    if(sp.hasOwnProperty(propName)) {
        sp[propName] = props[propName];
    }
}

上面的代码忽略了没有为目标对象定义的属性。对于像Sprite这样的非动态类,这是必需的。否则,您的代码将抛出一个错误。如果您想对无效的属性名称做任何事情,这取决于您;如果是这样,你可以在else中添加必要的代码。您还可以使用try / catch检测错误,但请确保仅捕获此特定的预期 - ReferenceError - ,否则这可能会掩盖其他错误,如空引用等。其他选项不会检查错误或者尝试/捕获并让代码在调用堆栈中抛出错误。不过,这对我来说似乎是一个坏主意。最好尽快处理错误(并尽可能地关闭它发生的地方)。