2013-07-24 185 views
6

我試圖做到這一點:創建動態屬性名對象

var KEYS = {} ; 

KEYS.PHONE_TYPE = 'phone-type'; 
KEYS.AGENT_TYPE = 'agent-type'; 

var myAppConfig = { 
    ... 
    iconMap : { 
     KEYS.PHONE_TYPE : 'icon-phone', 
     KEYS.AGENT_TYPE : 'icon-headphones' 
    }; 
    ... 
}; 

但它失敗,與消息:Expected ':' and instead saw '.'.

我如何使用間接(非字面初始化對象)鍵名?

需要明確的是,結果我要的是:

{ 
    'phone-type' : 'icon-phone', 
    'agent-type' : 'icon-headphones' 
} 
+0

和[使用級聯(動態)字符串作爲JavaScript對象重點?](HTTP:/ /stackoverflow.com/q/9708192/218196) –

+0

和[動態對象字面值在JavaScript?](http://stackoverflow.com/q/1998735/218196) –

+1

和[是否有可能向JavaScript對象添加動態命名的屬性?](http://stackoverflow.com/q/1184123/218196) –

回答

7

你必須分別使用括號符號添加這些屬性:

var myAppConfig = { 
    ... 
    iconMap : { } 
    ... 
}; 

myAppConfig.iconMap[ KEYS.PHONE_TYPE ] = 'icon-phone'; 
myAppConfig.iconMap[ KEYS.AGENT_TYPE ] = 'icon-headphones'; 
+1

謝謝。我仍然感到驚訝的是,JavaScript沒有內置支持使用動態關鍵字名稱初始化對象。 Python可以爲字典做到這一點,而且非常方便。我想這是來自這樣一個事實,即在JavaScript屬性中引號是可選的。 – dangonfast

+0

我猜JS通過允許不帶引號的屬性名稱放棄了這種可能性,Python通過要求引用的屬性名稱避免了這種情況。 – Petruza

2

如果您使用ES6(或類似的東西巴貝爾/ browserify),你可以寫這樣的:

iconMap : { 
    [KEYS.PHONE_TYPE] : 'icon-phone', 
    [KEYS.AGENT_TYPE] : 'icon-headphones' 
};