Создайте объект javascript, используя константы с точками в качестве свойства

У меня есть объект, содержащий некоторые константы моей программы, так что я могу использовать его во всех файлах исходного кода. Объект констант выглядит примерно так:

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',
  }
}

Проблема в том, что я не могу использовать константы таким образом. Джаваскрипт говорит:

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

person sergioFC    schedule 23.07.2014    source источник
comment
Итак, без использования eval я думаю, вы могли бы создать строку объекта так, как вы хотите (1-й абзац), а затем JSON.parse ее.   -  person Sebas    schedule 24.07.2014
comment
@antuan122: Ой, нет, спасибо.   -  person cookie monster    schedule 24.07.2014


Ответы (1)


Нет, вы не можете сделать это, используя синтаксис инициализации литерала объекта.

Таким образом, единственный способ - использовать то, что вы делаете во втором случае, - используя нотатин [...].

person zerkms    schedule 23.07.2014
comment
Однако в ECMAScript 6. {[CONSTANTS.THING_TYPE]: 'whateverType'} - person cookie monster; 24.07.2014
comment
@cookie monster: на самом деле интересно! Но на первый взгляд похоже на использование массива в качестве ключа хэш-таблицы (что допустимо для некоторых языков/реализаций). - person zerkms; 24.07.2014
comment
Хорошо спасибо. @cookiemonster, это было бы здорово, жду этого. - person sergioFC; 24.07.2014