2010-06-25 260 views
0

我試圖將對象的屬性作爲另一個對象的實際屬性。ActionScript設置來自其他對象屬性的對象屬性?

這裏是我的對象變量:

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

現在我要分配使用該對象的屬性精靈的屬性。

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

現在,我甚至不會去嘗試,因爲我知道編譯器會在我的臉上爆炸。但你應該能夠看到我想要做的事情。

爲什麼我試圖這樣做是因爲我正在閱讀XML文件,其中包含特定對象的可用屬性的未確定列表。所以不是寫一些類似巨大的switch語句來評估XML文件是否具有該特定屬性的值,而是試圖根據XML文件中可用的內容動態地分配屬性。

如果我想要做什麼是可能的,那麼最好的方法是什麼?

回答

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是必需的。否則,你的代碼會拋出一個錯誤。如果你想對無效的財產名稱做任何事情,這取決於你;如果是這樣,你可以在其他地方添加必要的代碼。你也可以使用try/catch檢測錯誤,但一定要只捕獲這個特定的期望 - ReferenceError - ,否則這可能會掩蓋其他錯誤,如空引用等。其他選項將不檢查錯誤或嘗試/捕獲並讓代碼向調用堆棧中拋出一個Error。不過,這對我來說似乎是一個糟糕的主意。儘可能快地處理錯誤(並儘可能地關閉它發生的地方)更好。

+0

令人驚歎。 hadOwnProperty就像隧道盡頭的燈光!爲什麼我以前沒有讀過它?!它會讓生活變得更容易。太感謝了! – TheDarkIn1978 2010-06-26 03:28:29