温馨提示:本文翻译自stackoverflow.com,查看原文请点击:javascript - ECMAScript Modules vs objects-as-namespaces

javascript - ECMAScript模块与命名空间对象

发布于 2020-03-27 11:07:16

我使用ES6随附的模块已有一段时间了。虽然我(本能地)知道使用它们会更好,但我仍在努力解释原因。

带模块;

  • 我可以做依赖声明(不是注入)。我不必为加载的每个javascript文件使用脚本标签。
  • 在模块之前,对象用作名称空间。现在我们有了模块,我们有了名称空间,它是代码组织的更好范例。

除此之外,为什么还要使用模块?

与仅将对象用作名称空间相比,它们具有什么优势?

编辑:

多亏了Bergi和Randy Casburn的评论,我现在可以指出另外两件事。

  • 使用模块模式(我一直称其为名称空间对象),我们具有相同的功能。但是我们通过闭包得到它。在模块中,我们有单独的文件。单独文件的功能很难被侵犯。

  • 模块隐藏其内部功能。它促使我们思考更好的软件设计。

查看更多

查看更多

提问者
Doruk
被浏览
43
Doruk 2019-07-03 22:22

回答我自己的问题。感谢您的评论。

  • 模块化是软件必不可少的。在使用ES Modules之前,我们通过Module Pattern(将相关的东西放入一个对象中)实现了模块在ES6中,模块是本机的。原生始终是更好的选择

  • 在模块模式中,我们制作了带有闭包的模块。在ES模块中,我们将它们编码在单独的文件中。

    • 单独的文件增加了另一层保护,以防止代码冲突。
  • 模块促使我们设计更好的软件。

    • 借助ES模块,我们具有export关键字,该关键字使我们可以自由选择要公开的内容。
    • 我们也有import关键字来从模块中选择我们想要的任何东西。
  • 借助ES6模块,我们现在可以将Javascript模块以单独的文件形式包含在我们的Web应用程序中,而无需将其包含在脚本标签中。