名称空间背后的概念是什么

What is the concept behind namespacing?

本文关键字:是什么 背后 空间      更新时间:2023-09-26

我很了解JavaScript的基本概念,但在理解一些高级概念时遇到了困难。我想知道的概念是命名。什么时候有用?我应该如何使用它?如果有任何解释,我将不胜感激。

我将用一个例子回答。

你想填充一个数字,使其为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中的命名空间可以通过多种方式实现,但通常可以归结为向Object添加属性

// 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"

要回答您关于何时使用名称空间的问题,在JavaScript中使用名称空间至关重要的一种情况是,当您使用其他JavaScript库时,。您希望避免代码与其代码之间以及代码之间的命名冲突。

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

在JavaScript中,企业级的名称空间是至关重要的,因为当页面上的另一个脚本使用与您相同的变量或方法名称时,保护您的代码不被破坏是很重要的。如今,随着大量第三方标签定期注入页面,这可能是我们职业生涯中需要解决的一个常见问题。作为一个行为良好的全局命名空间"公民",您也必须尽最大努力避免其他开发人员的脚本因同样的问题而执行。