Should/do 我必须在 Javascript ES6 中导出另一个导出的 class 返回的 class?

Should/do I have to export returning class returned by another exported class in Javascript ES6?

考虑以下模块:

export class Bar {

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

}

class Foo {

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

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

}

在任何情况下我都应该导出 Foo 吗? Why/Why 不是吗?

Should I export Foo too in any situation? Why/Why not?

从模块中导出某些内容的唯一原因是您希望外部代码能够直接调用或引用它。如果您希望客户能够创建 Foo 对象的唯一方法是调用 bar.generateFoo(),则没有理由导出 Foo。在 Javascript 中,您可以完全引用已构造对象上的所有 Foo 方法,而无需导出 class 本身。

另一方面,如果您希望模块的某些客户端能够使用 new Foo(someValue) 直接实例化 Foo 对象,那么您需要导出 Foo使之成为可能。

导出一个class就是导出构造函数。因此,如果您希望有人能够直接调用构造函数(例如,使用 new Foo() 构造一个新对象),则需要进行导出。如果他们不需要直接调用构造函数,那么你就不需要导出了。