Как определить глобальную константу из функции Javascript? - PullRequest
0 голосов
/ 26 февраля 2020

Я создаю приложение, состоящее из набора модулей, которые загружаются, когда приложение bootstrap:

const MODULES = []

function registerModules(config) {
  return modules.map(module => (new module(config)).install());
}

function bootstrap() {
  MODULES = registerModules({...}); 
}

Конечно, приведенное выше приведёт к ошибке. Я хочу назначить константу MODULE только при запуске приложения, но затем она должна быть исправлена. Возможно ли это?

Инициализация MODULES должна происходить внутри bootstrap из-за переменной конфигурации, которую я должен передать registerModules.

1 Ответ

1 голос
/ 26 февраля 2020

Если вы действительно хотите:

  • Инициализировать, но пустой массив MODULES во время, когда bootstrap() еще не вызывается, и
  • Сделать MODULES неизменяемый после заполнения и
  • Оставить текущую сигнатуру функции registerModules без изменений;

Тогда вы можете сделать это следующим образом:

function bootstrap() {
    Object.freeze(Object.assign(MODULES, registerModules({...}))); 
    // OR:
    // MODULES.push(...registerModules({...})); 
    // Object.freeze(MODULES);
}

Если вы не настаиваете на существовании MODULES до вызова bootstrap(), и вы готовы хранить эту информацию внутри объекта, то вы можете действовать следующим образом:

const globals = {};

function bootstrap() {
  globals.MODULES = registerModules({...});
  Object.freeze(globals.MODULES);
}

Если вы довольны globals, вы также можете заморозить этот объект:

Object.freeze(globals);
...