【问题标题】:ActionScript Setting Object Properties From Other Object Properties?ActionScript 从其他对象属性设置对象属性?
【发布时间】:2010-06-25 23:15:03
【问题描述】:

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

这是我的对象变量:

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

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

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

现在,我什至不会尝试这样做,因为我知道编译器会在我面前爆炸。但你应该能看到我在做什么。

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

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

【问题讨论】:

    标签: xml actionscript-3 dynamic properties


    【解决方案1】:

    按照您所做的那样定义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 -,否则这可能会掩盖其他错误,如空引用等。其他选项将不检查错误或尝试/catch 并让代码在调用堆栈上抛出一个错误。不过,这对我来说似乎是个坏主意。最好尽快处理错误(并尽可能靠近发生错误的地方)。

    【讨论】:

    • 太棒了。 hadOwnProperty 就像隧道尽头的一盏灯!为什么我以前没有读过它?!这将使生活变得更加轻松。谢谢一百万!
    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多