JQuery名称空间+通用实用程序函数的最佳实践

当前用于实现JQuery名称空间以托管通用实用程序function的“经验法则”是什么?

我有许多JavaScript实用程序方法分散在各种文件中,我想将它们整合到一个(或多个)命名空间中。 最好的方法是什么?

我目前正在查看两种不同的语法,按优先顺序列出:

//****************************** // JQuery Namespace syntax #1 //****************************** if (typeof(MyNamespace) === "undefined") { MyNamespace = {}; } MyNamespace.SayHello = function () { alert("Hello from MyNamespace!"); } MyNamespace.AddEmUp = function (a, b) { return a + b; } //****************************** // JQuery Namespace syntax #2 //****************************** if (typeof (MyNamespace2) === "undefined") { MyNamespace2 = { SayHello: function () { alert("Hello from MyNamespace2!"); }, AddEmUp: function (a, b) { return a + b; } }; } 

语法#1更加冗长,但似乎更容易维持下去。 我不需要在方法之间添加逗号,我可以保持对齐所有函数。

还有其他更好的方法吗?

对于jQuery插件,如果你希望它在元素上可用,则使用$.whatever如果你只想使用命名空间,则使用$.whatever 。 我建议阅读官方的插件编写文档和这些 文章 。

但是除了jQuery之外,命名为utils的最简单方法就是这样:

 var utils = window.utils || {}; utils.method = function(){}; 

JS中命名空间的基础知识最近并没有真正改变 – 你应该查看snook的文章 , DED的优雅方法和这个问题 。

使用自调用函数声明命名空间的主要优点是您可以在返回对象之前私下执行某些操作。 此外,该对象将由您的控制台自动完成,您将错过$ namespace,因为jQuery返回的是函数而不是对象。

为了记录,我最终使用了第一种语法:

 $(function () { //******************************** // PREDIKT NAMESPACE //******************************** if (typeof (Predikt) === "undefined") { Predikt = {}; } //******************************** // PREDIKT.TIMER NAMESPACE //******************************** if (typeof (Predikt.Timer) === "undefined") { Predikt.Timer = {}; } Predikt.Timer.StartTimer = function () { return new Date().getTime(); }; Predikt.Timer.EndTimer = function () { return new Date().getTime(); }; });