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

标签 javascript ecmascript-6 module namespaces

一段时间以来,我一直在使用 ES6 提供的模块。虽然我(本能地)知道最好使用它们,但我很难解释为什么。

带模块;

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

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

    与仅使用对象作为命名空间相比,它们有什么优势?

    编辑:

    感谢 Bergi 和 Randy Casburn 的评论,我现在可以再指出两件事。
  • 使用模块模式(我将其称为命名空间对象),我们具有相同的功能。但是我们通过闭包来获得它。在模块中,我们有单独的文件。单独文件的特性更难被侵犯。
  • 模块隐藏了它们的内部特征。它驱使我们思考更好的软件设计。
  • 最佳答案

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

  • 模块化是软件的必要条件。在 ES Modules 之前,我们通过 实现了模块模块模式 (这只是将相关的东西放在一个对象中)。通过 ES6,模块是原生的。和 原生总是更好的选择 .
  • 在模块模式中,我们制作了带有闭包的模块。在 ES 模块中,我们将它们编码在单独的文件中。
  • 单独的文件增加了另一层防止代码违规的保护。
  • 模块驱使我们设计更好的软件。
  • 使用 ES 模块,我们有 export 关键字,这使我们可以自由选择要公开的内容。
  • 我们还有 import 关键字可以从模块中选择我们想要的任何东西。
  • 使用 ES6 模块,我们现在可以将单独文件中的 Javascript 模块包含到我们的 Web 应用程序中,而无需将它们包含在脚本标签中。
  • 关于javascript - ECMAScript 模块与对象作为命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808667/

    相关文章:

    python - 有没有办法使用 vlc python 模块播放加载到内存的视频

    amazon-web-services - 如何部署具有多个角色的 Terraform 模块?

    javascript - 出现错误 - 未捕获( promise 中)DOMException : play() failed because the user didn't interact with the document first

    javascript - 异步/等待 promise 未决错误

    javascript - 在 Google Chrome 上跟踪 CSS 修改

    javascript - 处理未正确执行的链式和内部 promise

    javascript - 按不同的键对对象数组进行排序

    npm - Jest 和 ES2015 导入。 Jest 尊重 package.json 中的 pkg.module 声明

    javascript - 自定义用户链接如何工作?

    javascript - 如何通过ajax重新加载表数据