Должен ли я экспортировать возвращаемый класс, возвращенный другим экспортированным классом в Javascript ES6? - PullRequest
0 голосов
/ 23 апреля 2020

Рассмотрим следующий модуль:

export class Bar {

    generateFoo() {
        return new Foo(1);
    }

}

class Foo {

    constructor(fooValue) {
        this.fooValue = fooValue;
    }

    doFoo() { console.log(this.fooValue); }

}

Должен ли я экспортировать Foo в любой ситуации? Почему / почему нет?

1 Ответ

1 голос
/ 23 апреля 2020

Должен ли я экспортировать Foo в любой ситуации? Почему / почему нет?

Единственная причина экспортировать что-либо из модуля - это если вы хотите, чтобы код извне мог вызывать его или ссылаться на него напрямую. Если вы хотите, чтобы ваши клиенты могли создавать Foo объекты, только путем вызова bar.generateFoo(), то нет необходимости экспортировать Foo. В Javascript вы можете полностью ссылаться на все методы Foo на уже построенном объекте, не экспортируя сам класс.

Если, с другой стороны, вы хотите, чтобы какой-то клиент вашего модуля мог напрямую создайте экземпляр объекта Foo с помощью new Foo(someValue), затем вам потребуется экспортировать Foo, чтобы сделать это возможным.

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

...