2013-04-29 36 views
1

對於我來說,總是有點刺激(我在Python中也做了一些編碼,處理字典/對象類型的方式更清晰,更好),但在此之前ASC2.0,我總是能夠避開它,使用ASC2.0編譯器創建對象時使用的動態密鑰

var fooS:String = 'foo'; 
var barO:Object = { ('' + fooS): 'bar' }; 
for (var key:String in barO) 
    { 
     trace(key, barO[key]); 
    } 

(打印「富巴」)

但試圖做的是,在ASC2。 0導致一個

'(' is not allowed here 

錯誤。

任何想法?

我知道,我總是可以設置通過方括號訪問動態變量的關鍵,但任何時候,我需要做的

var fooS:String = 'foo'; 
var a:Object = {}; 
a[fooS] = 'bar'; 

我覺得相當矯枉過正和浪費。

+0

較少的字符是矯枉過正和浪費?你怎麼這麼喜歡骯髒的(''+)語法? – Kodiak 2013-04-29 12:14:09

+0

哦,不,我肯定不喜歡(''+)語法,我更喜歡as3把{myvar:「1」}當作一個對象,它有一個關鍵字,不管變量myvar包含什麼,遺憾的是沒辦法做到這一點。 最大的煩惱是當設置一個對象的鍵在一個函數內。使用ASC2.0,沒有一種方法可以在對象中設置變量的值。我更喜歡骯髒的語法,根本無法做到這一點。 – seaders 2013-04-30 12:02:13

回答

0

AS3符合ECMA第4版。 在這個版本中沒有「內聯」的方式來生成密鑰。 正如你所說,只有下面的代碼可用於:

var object:Object = {}; 
object['some' + 'dynamic' + 'key'] = 'some value'; 

唯一的選擇是創建自己的API,也許是這樣的:

var map:Map = new Map().put('some' + 'dynamic' + 'key', 'some value'); 

其中Map.put()返回「這」