3

我很了解 JavaScript 的基本概念,但我无法理解一些高级概念。我想知道的概念是命名空间。什么时候有用?我应该如何使用它?我会很感激任何解释。

4

2 回答 2

3

我会用一个例子来回答。

你想填充一个数字,所以它的2数字很长,

function pad(x) {
    return ('00' + x).slice(-2);
}
pad(3); // "03"

您在网站上有一些其他代码可以填充n数字

function pad(x, n) {
    x = '' + x;
    n = n + 1 - x.length;
    if (n < 0) n = 0;
    return new Array(n).join('0') + x;
}
pad(3, 5); // "00003"

现在,如果您在同一页面上有这两段代码会发生什么?
按照他们现在的顺序,你会得到

pad(3); // RangeError: Invalid array length

因为函数名称相同,所以使用了错误的函数。

如何避免这些问题?命名空间!如果您将所有代码放入命名空间,您唯一需要担心的冲突是命名空间的选择名称,其他所有内容都是根据该名称命名的,因此不会发生冲突。


JavaScript中的命名空间可以通过多种方式实现,但通常归结为向对象添加属性

// make an Object to be your namespace
var myNamespace = {};
// define your thing of interest within namespace
myNamespace.pad = function (x) {return ('00' + x).slice(-2);};
// and then use it
myNamespace.pad(3); // "03"
于 2013-06-29T17:22:42.870 回答
2

要回答有关何时有用的问题,在 JavaScript 中使用命名空间可能必不可少的一种情况是,当您使用其他 JavaScript 库时。您希望避免代码与其代码之间以及它们之间的命名冲突。

在对此问题的详细讨论中引用Addy Osmani的话:

在 JavaScript 中,企业级别的命名空间至关重要,因为在页面上使用与您相同的变量或方法名称的另一个脚本的情况下,保护您的代码免于中断非常重要。如今,随着第三方标签的数量定期注入页面,这可能是我们在职业生涯的某个阶段都需要解决的常见问题。作为全局命名空间中表现良好的“公民”,您也必须尽最大努力避免因同样的问题而阻止其他开发人员的脚本执行。

于 2013-06-29T17:08:54.167 回答