组织我的JavaScript函数库

组织我的JavaScript函数库,javascript,Javascript,随着时间的推移,我创建了一系列不同的JavaScript函数。其中大多数是静态函数,可以修改日期的显示、从数组创建选择菜单HTML等 我现在把它们都放在一个名为“general.js”的文件中,该文件由我的HTML页面直接调用,每个文件看起来都像: function modifyDate(data){....} function makeArray(arr){....} 然后我将它们用作: alert(modifyDate("12/14/2013")); alert(myLibrary.mo

随着时间的推移,我创建了一系列不同的JavaScript函数。其中大多数是静态函数,可以修改日期的显示、从数组创建选择菜单HTML等

我现在把它们都放在一个名为“general.js”的文件中,该文件由我的HTML页面直接调用,每个文件看起来都像:

function modifyDate(data){....}
function makeArray(arr){....}
然后我将它们用作:

alert(modifyDate("12/14/2013"));
alert(myLibrary.modifyDate("12/14/2013"));
我认为这是一个坏主意,因为它可能与其他图书馆冲突。相反,我想到的是以下几点:

myLibrary={};
myLibrary.modifyDate= function(data){....}
myLibrary.makeArray= function(arr){....}
他们将其用作:

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

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

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

有关名称空间的更多讨论,请参见此问题:

通常,名称空间的好处是:

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

    请注意,如果要使用名称空间,可能需要研究模块模式,这是一种保护名称空间范围以允许私有变量/受保护状态的方法。这里有一个很好的例子,或者你可以看看这个

    在您的情况下,模块模式如下所示:

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

    谢谢你,本。有没有关于如何实现名称空间的建议?我只是在谷歌上搜索了“如何实现javascript名称空间”,然后发现了。他们建议使用eval(),这似乎总是个坏主意。关于你的第二个好处,我想我可以使用
    myGenericLibrary.mySpecificLibrary.myFunction()
    ,对吗?@user1032531无需使用eval。当然,如果需要的话,你可以有两个名称空间,尽管很快调用会很烦人。您也可以将其拆分为两个名称空间,或者根本不必担心上下文。让您和他人易于阅读/理解的内容。至于具体的实现,请看我添加的模块模式示例和各种链接。再次感谢Ben,是的,您的示例明确地告诉了我如何实现。您推荐第一种方法(与示例中的方法相同)还是第二种方法(规范博客)?后者更新,在博客上评论的人更多,但这并不一定意味着什么。感谢博客只是列出了模块模式可以实现的一些其他方法。这是相同的概念。无论哪一个例子对你最清楚、最有帮助,你都应该去做。