使用以点为属性的常量创建javascript对象

使用以点为属性的常量创建javascript对象,javascript,duck-typing,Javascript,Duck Typing,我有一个对象保存我的一些程序常量,这样我就可以在所有源代码文件中使用它。constants对象如下所示: CONSTANTS = { THING_TYPE: 'type', THING_INFORMATION: 'information', THING_DESCRIPTION: 'description', THING_NAME: 'name', manyOtherConstants } 我想用类似的符号来创建对象,并将常数的值作为对象的属性;这就是我想做的: var my

我有一个对象保存我的一些程序常量,这样我就可以在所有源代码文件中使用它。constants对象如下所示:

CONSTANTS = {
  THING_TYPE: 'type',
  THING_INFORMATION: 'information',
  THING_DESCRIPTION: 'description',
  THING_NAME: 'name',
  manyOtherConstants
}
我想用类似的符号来创建对象,并将常数的值作为对象的属性;这就是我想做的:

var myObject = {
  CONSTANTS.THING_TYPE: 'whateverType',
  CONSTANTS.THING_INFORMATION: {
    CONSTANTS.THING_DESCRIPTION: 'whateverDescription',
    CONSTANTS.THING_NAME: 'whateverName',
  }
}
问题是我不能用那种方式使用常量。Javascript说:

'SyntaxError: missing : after property id'
有没有办法用这个符号来做我想做的事情?还是我唯一能做的就是以下几点

var myObject = {}
myObject[CONSTANTS.THING_TYPE] = 'whateverType';
myObject[CONSTANTS.THING_INFORMATION] = {};
myObject[CONSTANTS.THING_INFORMATION][CONSTANTS.THING_DESCRIPTION] = 'whateverDescription';
myObject[CONSTANTS.THING_INFORMATION][CONSTANTS.THING_NAME] = 'whateverName';

不,您不能使用对象文字初始化语法来执行此操作


因此,唯一的方法是使用第二种情况下的方法-使用
[…]
notatin.

因此,不使用
eval
我认为您可以按照您想要的方式构建对象字符串(第1段),然后使用
JSON.parse
对其进行解析。@antuan122:Yekes,不,谢谢。尽管使用ECMAScript 6<代码>{[CONSTANTS.THING\u TYPE]:'whateverType'}@cookie monster:实际上这很有趣!但乍一看就像是使用数组作为哈希表键(在某些语言/实现中是有效的),好的,谢谢@Cookie就是grat,在等着它。