Должен ли я экспортировать Foo в любой ситуации? Почему / почему нет?
Единственная причина экспортировать что-либо из модуля - это если вы хотите, чтобы код извне мог вызывать его или ссылаться на него напрямую. Если вы хотите, чтобы ваши клиенты могли создавать Foo
объекты, только путем вызова bar.generateFoo()
, то нет необходимости экспортировать Foo
. В Javascript вы можете полностью ссылаться на все методы Foo
на уже построенном объекте, не экспортируя сам класс.
Если, с другой стороны, вы хотите, чтобы какой-то клиент вашего модуля мог напрямую создайте экземпляр объекта Foo
с помощью new Foo(someValue)
, затем вам потребуется экспортировать Foo
, чтобы сделать это возможным.
Экспорт класса - это экспорт функции конструктора. Таким образом, вам нужно выполнить этот экспорт, если вы хотите, чтобы кто-то мог вызывать конструктор напрямую (например, создать новый объект с помощью new Foo()
). Если им не нужно напрямую вызывать конструктор, вам не нужно его экспортировать.