JQuery 命名空间是一个好习惯吗?

Posted

技术标签:

【中文标题】JQuery 命名空间是一个好习惯吗?【英文标题】:Is JQuery namespace a good practice? 【发布时间】:2011-09-26 03:07:28 【问题描述】:

谁能向我解释一下,如果使用命名空间是一种很好的编码习惯。为什么需要它?如果这是一个好方法,为什么 JQuery 默认不包含它。有一个单独的插件可以实现此功能。

我看到了这个post,其中提到了一些方法。有人在帖子中提到了内存泄漏,令人担忧。

最后,组织 JQuery 库的最佳方式是什么?

谢谢,

【问题讨论】:

您不需要命名空间,只需使用带有 <insert favourite module loader> 的模块即可 requireJS 定义 require 关键字来加载模块和 define 关键字来定义模块。您使用 zero 全局范围。还有其他的模块加载器,你自己去找吧;) 【参考方案1】:

注意事项:

命名空间是一种很好的做法,因为您与其他脚本的名称发生冲突的可能性较小。这样,只有您的命名空间必须是唯一的,但多个命名空间可以在其中具有相同的功能. jQuery 使用命名空间,您不需要插件。 jQuery 对象本身就是一个命名空间。 . . jQuery 中的任何函数在 jQuery 对象中都是“名称间隔的”。这适用于任何 javascript 对象。

回应阿米尔的评论:

YUI 通过向 YUI 对象添加一个变量来实现命名空间,其中添加的变量也是一个对象。他们的命名空间函数只是为你构建它。

var lib = 
    util:,
    widget:,
    tool:
;

//creates a function named reset in the lib.util namespace
lib.util.reset = function() ;

//creates a function named reset in the lib.widget namespace
lib.widget.reset = function() ;

在 jQuery 中,您将其添加到 jQuery.fn(或 $.fn,如果您将 $ 用于 jQuery() 命名空间。

【讨论】:

感谢 Levi 的快速回复。你能给我解释一下第二点吗? jQuery 没有作为 YUI (yahoo) 库的命名空间。如何在没有命名空间/的情况下组织 jQuery 库/ 我知道您可以使用 $.fn 但 jQuery 文档提到:“不要让每个插件使用多个命名空间来混淆 jQuery.fn 对象。”这就是为什么我要问什么是在 jQuery 中组织库的最佳方式是什么? 您是对的,请参阅docs.jquery.com/Plugins/Authoring#Plugin_Methods 了解如何为您的特定插件命名空间。【参考方案2】:

Re:组织 jQuery 库的最佳方法,您应该从阅读 jquery.com 上的插件创作文章开始:

http://docs.jquery.com/Plugins/Authoring

【讨论】:

【参考方案3】:

require.js 是一种更好的做法,因为它不需要您将对象添加到窗口对象上。这也不意味着您不必担心以前的 javascript 文件的加载顺序。

【讨论】:

以上是关于JQuery 命名空间是一个好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 jquery 小部件上使用啥命名空间?

jQuery 事件命名空间可以包含破折号吗?

jQuery 插件创作和命名空间

有人知道好的 Django URL 命名空间教程吗? [关闭]

jQuery选择带有命名空间元素的选择器

C++ 命名空间,与 Java 包的比较