【问题标题】:How can I efficiently export multiple classes in ES6 JavaScript?如何在 ES6 JavaScript 中高效地导出多个类?
【发布时间】:2018-08-10 15:52:59
【问题描述】:

在我的 ES6 Node.js 应用程序中,我有一个要导出的类文件:

class Class1 {...}
class Class2 {...}

module.exports = {
    Class1, Class2
}

如果有一天我做了 Class3,我不想记得将它添加到导出列表中。我想要的是这样的:

module.exports = {
    class Class1 {...},
    class Class2 {...}
}

有没有什么语法可以做到这一点?

【问题讨论】:

  • 你可以写module.exports = { Class1: class {…}, Class2: class {…}};,但为什么不直接使用 ES6 模块呢?

标签: javascript node.js class ecmascript-6


【解决方案1】:

您可以在定义类的同时添加导出:

module.exports.Class1 = class Class1 {...};
module.exports.Class2 = class Class2 {...};

这不是更好,但可能更容易记住。

【讨论】:

  • 类名还是要写两遍,不过这样忘不了。够用了
  • 在 Node.js 之外,在标准的 ES6 JavaScript 中,你可以只说 export class Class1 {...} 而你不必写两次类名。
【解决方案2】:

您要求 ES6 解决方案:只需在声明类之前添加 export :)

export class Foo() {

}

export class Bar() {

}

export class Baz() {

}

module.exports 工作正常,但它是 CommonJs,而不是 ES6!

在另一个文件中,您可以使用以下语句导入它们:

import * as MyClasses from './path/classes.js'

const foo = new MyClasses.Foo()

或

import { Foo, Bar, Baz } from './path/classes.js'

const foo = new Foo()

【讨论】:

  • 我不认为你的区分是正确的。类是 ES6 和 CommonJS + 类仍然算作 ES6。这个问题没有引用 ES 模块语法,所以大概提到 ES6 是否引用了其他常见的 ES6 特性,而不是具体的 ES 模块语法。在某些情况下使用 ES 模块语法当然没问题,但问题也从未提及 Babel,只是标准 Node。
猜你喜欢
  • 2016-11-15
  • 2018-02-23
  • 1970-01-01
  • 2020-06-30
  • 2016-04-15
  • 2016-04-11
  • 2017-12-03
  • 2017-12-02
  • 2023-03-17
相关资源
最近更新 更多