组织我的JavaScript函数库

Organizing my JavaScript function library

随着时间的推移,我创建了一系列不同的javascript函数。它们中的大多数都是静态函数,可以执行诸如修改日期显示、从数组中创建选择菜单HTML等操作。

我目前把它们都放在一个名为"general.js"的文件中,这个文件又被我的HTML页面直接调用,每个文件看起来都像:

1
2
function modifyDate(data){....}
function makeArray(arr){....}

然后我把它们用作:

1
alert(modifyDate("12/14/2013"));

我认为这是个坏主意,因为它可能会与其他图书馆发生冲突。相反,我在考虑如下问题:

1
2
3
myLibrary={};
myLibrary.modifyDate= function(data){....}
myLibrary.makeArray= function(arr){....}

他们将其用作:

1
alert(myLibrary.modifyDate("12/14/2013"));

请注意,我是一种弥补这一点,因为我去。请提供如何最好地组织我的javascript库的建议。谢谢你


您所描述的内容称为名称间距,通常被认为是一个好主意。

关于名称空间的更多讨论可以在这个问题中找到:他们为什么在JavaScript中使用名称空间?

一般来说,名称间距的好处是:

  • 限制全球范围的污染并防止命名冲突
  • 为函数名提供上下文(例如,我们希望WindowUtils.getHeightMenuUtils.getHeight得到不同的结果)。
  • 因此,您的示例将提供第一个好处,但不一定是第二个好处,如果这只是一组抓取包功能。不管这是好事还是坏事,都完全取决于你的个人项目和你想做什么。

    请注意,如果要成为名称空间,您可能需要研究模块模式,这是一种保护命名空间范围以允许私有变量/受保护状态的方法。对于类似的问题,在这个答案中有一个很好的例子,或者您可以在模块模式中查看这个规范化的博客文章。

    在您的例子中,模块模式如下所示:

    1
    2
    3
    4
    5
    6
    7
    var myLibrary=(function(){
      var privateVariable; //accessible by your functions but not in the global context    
      return {
        modifyDate: function(data){....},
        myLibrarymakeArray: function(arr){....}
      };
    }())