【发布时间】:2012-02-13 13:20:16
【问题描述】:
在创建 JavaScript 命名空间时应注意哪些危险/注意事项?
我们的项目相当广泛,我们正在运行大量 JavaScript 文件(20 多个,期待更多)。不使用命名空间就不可能有任何代码可维护性,所以我们这样实现它们:
var namespace1 = {
doSomething: function() {
...
},
doSomethingElse: function() {
...
}
}
然后为了创建层次结构,我们像这样链接它们:
var globalNamespace = {
functions1: namespace1,
functions2: namespace2,
...
}
这很好用,但它本质上是一个“技巧”,让 JS 表现得好像它确实有命名空间一样。尽管这种方法被大量使用,但大多数关于此的文献似乎都集中在如何做到这一点上,而不是是否有任何可能的缺点。随着我们编写更多的 JS 代码,这正迅速成为我们系统工作方式中不可或缺的一部分。因此,无缝运行非常重要。
在任何情况下,这种“诱导”命名空间系统会导致您出错,或者需要特别注意吗?我们可以安全地期望所有浏览器都有相同的行为吗?
【问题讨论】:
-
命名空间通常不能解决冲突问题,它们只是将其向上移动一层。现在你被困在没有其他人能够在他们不相关的项目中使用
namespace1的情况下。 -
它基于非常基本的 JavaScript 语义。没有什么危险的,甚至没有什么特别“聪明”的。在我看来,这也是收集和公开功能的一种相当薄弱的方式。
-
唯一真正的“陷阱”是您是否计划引入“私有”变量。
-
@MarcB:这不是什么大问题。我不希望每次都加载 all 代码。主要是关于可维护性。
标签: javascript jquery version-control namespaces project-management