2014-01-25 88 views
0

另一個關鍵的枚舉值我有一個枚舉:使用枚舉在Javascript中

var a = {X: 0, Y: 1}; 

而且,我要創建的第一個值另枚舉。事情是這樣的:

var b = {a.X: "foo", a.Y: "bar"}; 

這樣做給了我一個SyntaxError: Unexpected token .

有沒有一種方法,我可以用一個枚舉的值在JavaScript中關鍵到另一個?

FYI:我知道我可以做這樣的事情,以達到我想要

var b = {}; 
b[a.X] = "foo"; 
b[a.Y] = "bar"; 

但是,從可讀性的角度來看,如果有一些方法來做到這一點前者方式,我寧願。

+0

您是否要動態地執行此操作? – thefourtheye

+0

@ thefourtheye No. –

回答

2

不,你必須做第二種方式。

要理解這樣做的原因,考慮下面的代碼:

var foo = 'bar'; 

var object = { 
    foo: 'baz' 
}; 

在對象的文字,是foo存儲在變量foo"foo"價值?

根據語言的規則,它是後者。所以對象表達式的關鍵字本身不能是複雜的表達式。

您可能會在可讀性方面是寫沿着這些線路的輔助最接近:

function mapKeys(object, keyMapping) { 
    var mapped = {}; 
    for (var key in keyMapping) { 
    mapped[object[key]] = keyMapping[key]; 
    } 
    return mapped; 
} 

var a = { X: 0, Y: 1 }; 

var b = mapKeys(a, { 
    X: 'foo', 
    Y: 'bar' 
}); 
// => { 0: 'foo', 1: 'bar' } 
8

我只是碰到這種進來,同時尋找別的東西......

您現在可以使用ES6語法執行此操作

var b = { 
    [a.X]: "foo", 
    [a.Y]: "bar" 
}; 
+0

是的!這就是所謂的計算屬性名稱:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names – Tariq