为什么不将类添加到窗口或命名空间变量中的全局



我正在使用webpack来传输我的js文件。Im使用导入/导出语法(与require和export.module的CommonJS方式相反)。这意味着,如果我需要在特定脚本的上下文中使用它们,我需要多次导入每个类及其所有子类。

问题:

即使js中不支持类,为什么我们需要一直导入它们?如果(我只是代表类)它们适用于所有范围,会不会更容易?

编辑:为了避免污染全球范围,可以做一些类似global.myLibs的事情,并解决这个问题。我个人用一些独特的东西作为类的前缀,但这种方法甚至可以为那些我不认为的类服务。

例如:

window.myClasses可以作为我所有类的容器。我来自iOS背景,在那里,主"捆绑包"中的所有类,在java中,我认为这将是一个"包",每个人都可以使用。重新导入类本身似乎没有任何作用。

请参见此处:为什么我每次都需要导入webpack捆绑包中的模块?

和这里:捆绑js文件与webpack类未定义的

在全局范围内添加内容可能会导致命名冲突。如果您创建了一个名为Node的类,通过执行window.Node = Node将其添加到全局作用域中,会怎么样?将丢失对浏览器全局节点对象的引用。

您可以争辩说,您永远不会使用已经用于全局对象的名称。但现在,如果在一年左右的时间里,一个新的对象被添加到规范中,与您的对象同名,并且您想将其与自己的对象一起使用,该怎么办?您必须做出选择,或者重命名自己的对象。这不是未来的证明。

在每个使用它的模块中导入相同的模块是一种最佳做法。因为这样做,你就不会污染全球范围。不要担心它会在您的最终捆绑包中导入此模块的代码n次。Webpack只导入一次,然后每次导入时都使用对模块的引用。

请参阅以下资源:

  • JavaScript模块:Preethi Kasireddy的Medium入门指南
  • Eloquent Javascript模块一章

最新更新