组织我的JavaScript函数库

时间:2013-04-01 16:19:44

标签: javascript

随着时间的推移,我创建了许多各种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库的建议。谢谢

1 个答案:

答案 0 :(得分:8)

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

有关命名空间的更多讨论可以在这个问题中找到:Why do they use namespaces in javascript?

一般来说,命名空间的好处是:

  1. 限制全球范围内的污染并防止命名冲突
  2. 为您的函数名称提供上下文(我们预计WindowUtils.getHeightMenuUtils.getHeight会产生不同的结果。
  3. 所以你的例子将提供第一个好处,但不一定是第二个好处,如果这只是一组抓包功能。这是好事还是完全取决于你的个人项目以及你想要做的事情。

    请注意,如果您将成为命名空间,则可能需要查看模块模式,这是一种保护命名空间范围以允许私有变量/受保护状态的方法。 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){....}
      };
    }())