我正在尝试将对象的属性转换为另一个对象的实际属性。
这是我的对象变量:
var propObj:Object = {prop:"width", width:50};
现在我想使用该对象的属性来分配精灵的属性。
var sp:Sprite = new Sprite();
sp.(propObj.prop as Sprite.property) = propObj.width;
现在,我甚至不打算尝试,因为我知道编译器会在我脸上爆炸。但你应该能够看到我想要做的事情。
为什么我要这样做是因为我正在读取一个XML文件,其中包含特定对象的可用属性的未确定列表。因此,我没有编写类似于巨大的switch语句来评估XML文件是否具有该特定属性的值,而是尝试根据XML文件中的可用内容动态分配属性。
如果我想做的事情是可能的,那么最好的方法是什么?
答案 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
- ,否则这可能会掩盖其他错误,如空引用等。其他选项不会检查错误或者尝试/捕获并让代码在调用堆栈中抛出错误。不过,这对我来说似乎是一个坏主意。最好尽快处理错误(并尽可能地关闭它发生的地方)。