使用动态属性名称创建对象

10

我想要做这件事:

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'
    };
    ...
};

但是它失败了,并显示以下信息:期望“:”,但看到的是“.”

我如何使用间接(非文字)键名初始化对象?

明确一下,我想要的结果是:

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

使用JavaScript对象键的连接字符串(动态字符串)? - Felix Kling
JavaScript中的动态对象文字? - Felix Kling
1
能否在JavaScript对象中动态添加命名属性? - Felix Kling
我猜我明白你的意思了!:) 但是我向你保证,我之前已经找过了! - blueFast
2个回答

13
如果您正在使用ES6(或像Babel/browserify这样的工具),可以这样编写代码:
iconMap : { 
    [KEYS.PHONE_TYPE] : 'icon-phone', 
    [KEYS.AGENT_TYPE] : 'icon-headphones'
};

7

您需要使用方括号表示法单独添加这些属性:

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

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

1
谢谢。我仍然感到惊讶的是,JavaScript没有内置支持使用动态键名初始化对象。对于字典,Python可以做到这一点,并且非常方便。我猜这可能是由于JavaScript属性中引号是可选的这一事实造成的。 - blueFast
我猜JS通过允许未引用的属性名称放弃了这种可能性,而Python则要求使用引号括起来的属性名称来避免这种情况。 - Petruza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接