随着时间的推移,我创建了许多各种JavaScript函数。它们中的大多数都是静态函数,可以修改日期的显示,从数组创建选择菜单HTML等等。
我目前将它们全部放在名为“general.js”的文件中,然后由我的HTML页面直接调用,每个文件看起来像:
function modifyDate(data){....}
function makeArray(arr){....}
然后我将它们用作:
alert(modifyDate("12/14/2013"));
我认为这是一个坏主意,因为它可能与其他图书馆发生冲突。相反,我正在考虑以下内容:
myLibrary={};
myLibrary.modifyDate= function(data){....}
myLibrary.makeArray= function(arr){....}
他们将它们用作:
alert(myLibrary.modifyDate("12/14/2013"));
请注意,我正在努力实现这一目标。请提供我应该如何最好地组织我的JavaScript库的建议。谢谢
答案 0 :(得分:8)
您所描述的内容称为命名空间,通常被认为是一个好主意。
有关命名空间的更多讨论可以在这个问题中找到:Why do they use namespaces in javascript?
一般来说,命名空间的好处是:
WindowUtils.getHeight
和MenuUtils.getHeight
会产生不同的结果。所以你的例子将提供第一个好处,但不一定是第二个好处,如果这只是一组抓包功能。这是好事还是完全取决于你的个人项目以及你想要做的事情。
请注意,如果您将成为命名空间,则可能需要查看模块模式,这是一种保护命名空间范围以允许私有变量/受保护状态的方法。 this answer to a similar question中有一个很好的示例,或者您可以查看此canonical blog post on the module pattern
在您的情况下,模块模式看起来像这样:
var myLibrary=(function(){
var privateVariable; //accessible by your functions but not in the global context
return {
modifyDate: function(data){....},
myLibrarymakeArray: function(arr){....}
};
}())