如何使用其他对象属性值定义对象键?

sko*_*jic 3 javascript

我有一个对象,我想使用对象属性值作为键(简化):

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)

但是我想知道是否可以使用对象属性值定义属性名称?

Mar*_*kai 5

恐怕,你的意思是不可能的。您不能像这样使用变量作为对象文字中的键:

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 也不支持。


Rob*_*obG 5

计算属性名称将在 ECMAScript 第 6 版中引入,它们位于当前草案中,因此您可以执行以下操作:

this.request = {
    [this.settings[this.gameName].title]
}
Run Code Online (Sandbox Code Playgroud)

它们现在得到了相当好的支持,请参阅MDN了解更多详细信息。