名称空间背后的概念是什么
What is the concept behind namespacing?
我很了解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中,企业级的名称空间是至关重要的,因为当页面上的另一个脚本使用与您相同的变量或方法名称时,保护您的代码不被破坏是很重要的。如今,随着大量第三方标签定期注入页面,这可能是我们职业生涯中需要解决的一个常见问题。作为一个行为良好的全局命名空间"公民",您也必须尽最大努力避免其他开发人员的脚本因同样的问题而执行。
相关文章:
- “var self = this”方法背后的原理是什么?
- React Router 如何处理 onEnter 背后的逻辑是什么?
- 让函数中的接收器默认为全局对象背后的基本原理是什么?
- AJAX 跨域安全背后的基本原理是什么?
- Facebook评论API - Facebook所说的“评论框背后”是什么意思
- Lightstreamer背后的魔力是什么
- d3背后的逻辑是什么.js nice()刻度
- JavaScript:“shift”方法背后的逻辑是什么?
- Math.max方法背后的逻辑是什么
- 与compareFunction一起使用的排序方法背后的逻辑是什么
- 用continuation生成Javascript代码背后的诀窍是什么
- 窗口背后的原因和窗口的顶部属性是什么
- 名称空间背后的概念是什么
- 堆栈溢出背后的算法是什么? ajax标记搜索字段
- 网站上的3D图像非常酷,但这背后的技术是什么?
- 使用Object.assign创建对象背后的思想是什么?
- canPlayType背后的原理是什么?
- javascript中var a = (expression1, expression2)背后的原因是什么?
- 错误处理-当JavaScript抛出ReferenceError时,其背后的逻辑是什么
- 选择一个完整的基于CSS的菜单和基于Javascript/CSS的菜单背后的基本原理是什么?