【问题标题】:When is namespacing appropriate in JavaScript? [closed]什么时候在 JavaScript 中适合命名空间? [关闭]
【发布时间】:2013-09-27 16:34:52
【问题描述】:

对于我正在处理的新页面,我想确保我尽我所能“正确”地做所有事情。我想知道最佳实践是什么。每页一个 JS 文件或一个包含所有内容的文件。我找到了this question,这对一些人有所帮助,但提出了更多问题。

我几乎只将 JS 用于三件事:

  1. 在按钮单击时转换内容(显示/隐藏面板等),
  2. 预验证表单,以及
  3. AJAX 调用。

当我将我的用例与命名空间方法进行比较时,似乎有点过头了;我真的不明白为什么我需要设置如此复杂的框架来使用 JavaScript。这给我留下了两个问题:

  1. 对于我正在做的事情,我应该每页使用一个 JS 文件,还是使用爱尔兰的命名空间技术和单个脚本导入?
  2. 使用 JS 需要这么多结构的人到底是什么鬼?

【问题讨论】:

  • 爱尔兰人的命名空间技术是什么?
  • 请包含一个简短的、可重现的代码示例来说明问题。 ShackOverflow 很难解决问题中没有代码的代码问题。 ;)
  • Paco:我包含了一个链接,但这里有另一个直接指向他的文章:paulirish.com/2009/… Joe:我想这更像是一个哲学问题,而不是一个直接的代码问题。
  • @Danthier:正如他在那篇文章中提到的那样,这种技术称为路由namespaces 是另一回事。您应该始终将它们用于您的模块。如果您觉得不需要,则不应使用基于 DOM 的路由(即它不会为您简化事情)。

标签: javascript jquery namespaces


【解决方案1】:

好的,该页面是 2009 年的 - 从那时起,在网络上使用 Javascript 的方式发生了很大变化。

现在大多数网页都包含来自不同来源(和不同开发人员)的多个第三方 Javascript 文件。将 您的 代码封装在自定义命名空间中以防止您的代码被使用相同变量名的其他代码覆盖是很有意义的,这并不比以下更难:

Mynamespace= {};
Mynamespace.foo = "bar";
Mynamespace.foobar = function(){
    //function body
};

编写结构化的 Javascript 并不是要增加复杂性。编写结构化 Javascript 允许您将行为和职责封装到代码的可重用部分中,这些部分更易于测试、维护、重用和扩展。

您甚至不需要做出单文件/多文件的判断。您可以使用像 require.js 这样的框架,将所有单独的代码文件编译到一个文件中进行部署。

JavaScript 现在正式名称为 a first-class language in Visual Studio,它被用于编写 Web 服务器、模板系统甚至 3d 引擎。

欢迎来到 2013 年 ;-)

_佩斯

【讨论】:

    【解决方案2】:

    如果您的页面没有任何共同点,您可以为每个页面使用一个脚本文件。如果您的页面之间有很多共同的逻辑,您可能希望将这些共同位放入自己的文件中,并将其包含在您需要的任何地方。

    至于为什么需要如此多的结构,人们正在使用 JavaScript 制作越来越复杂的东西。以 Gmail 为例。我想那里有相当多的代码,如果没有太多的结构,它会变得难以快速维护。

    【讨论】:

    • 我想这是有道理的,我只是想我的文件每个单独都会非常小,所以发出一个请求并缓存它可能是有意义的。在我开始拆分之前,我的文件应该是什么“最大”的任何建议?
    • @Danthier:至少 10 KiB 之前我不会考虑拆分。即使那样,拆分它也不是很重要。如果它达到 75 KiB,那么我可能会开始拆分它。
    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 2013-01-28
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2011-10-03
    • 2017-04-25
    相关资源
    最近更新 更多