4

随着时间的推移,我创建了一堆不同的 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 库。谢谢

4

1 回答 1

8

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

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

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

  1. 限制全局范围的污染并防止命名冲突
  2. 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){....}
  };
}())
于 2013-04-01T16:22:37.937 回答