命名空间背后的概念是什么?

时间:2013-06-29 17:06:44

标签: javascript namespaces

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

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:2)

要回答关于它何时有用的问题,在JavaScript中使用命名空间的一个场景是当您使用其他JavaScript库时。您希望避免在代码与代码之间以及它们之间发生命名冲突。

引用Addy Osmani详细讨论此问题:

  

在JavaScript中,企业级别的命名空间非常重要,因为使用相同的变量或方法名称保护代码在页面上的其他脚本不会中断时非常重要。由于当前定期向页面中注入第三方标签的数量,这可能是我们在职业生涯中需要解决的常见问题。作为全局命名空间中表现良好的“公民”,您也必须尽力避免由于同样的问题而阻止其他开发人员的脚本执行。