当前用于实现
JQuery名称空间以托管通用实用程序功能的“经验法则”是什么?
我有许多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插件,如果你希望它在元素上可用,则使用$.fn.myPlugin;如果你只想使用命名空间,则使用$.whatever.我建议阅读官方
Plugins Authoring document和
these
articles.
但是除了jQuery之外,命名为utils的最简单方法是:
var utils = window.utils || {}; utils.method = function(){};
JS中命名空间的基础知识最近并未真正改变 – 您应该查看snook’s article,DED’s elegant approach和this SO question.
使用自调用函数声明命名空间的主要优点是您可以在返回对象之前私下执行某些操作.此外,该对象将由您的控制台自动完成,您将错过$namespace,因为jQuery返回的是函数而不是对象.