我有一个对象,我想使用对象属性值作为键(简化):
var App = function() {
this.settings = {
'tetris': {
title: 'Tetris'
},
'galaxian': {
title: 'Galaxian'
}
};
this.gameName = 'tetris';
this.request = {
this.settings[this.gameName].title: 'THIS KEY IS INVALID' // :(
}
};
Run Code Online (Sandbox Code Playgroud)
我知道我可以将其分配为:
this.request[ this.settings[this.gameName].title ] = 'Valid...';
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否可以使用对象属性值定义属性名称?
恐怕,你的意思是不可能的。您不能像这样使用变量作为对象文字中的键:
var key = "somekey";
var obj = {key: "value"}
Run Code Online (Sandbox Code Playgroud)
上面的代码将生成一个具有 key 的对象key。
您只能使用变量来定义这样的对象元素:
var key = "somekey";
var obj = {};
obj[key] = "value"
Run Code Online (Sandbox Code Playgroud)
然后对象 get 是一个带有键的元素 somekey
编辑:如评论中所述,在 ECMAScript 6 中引入了对对象文字中计算属性的支持。然而,对于对象的文字计算性能的浏览器的支持是非常渺茫的(你可以看看它在这里下的语法- >对象文本)。例如 IE 11 不支持它,Chrome 43 也不支持。
计算属性名称将在 ECMAScript 第 6 版中引入,它们位于当前草案中,因此您可以执行以下操作:
this.request = {
[this.settings[this.gameName].title]
}
Run Code Online (Sandbox Code Playgroud)
它们现在得到了相当好的支持,请参阅MDN了解更多详细信息。