命名空间namespace(某些语言中叫package),是一个在静态语言中常见的概念。它可以帮助我们更好地整理代码,并可避免命名冲突。
举一个栗子,如果有两个人都叫小明,我们很难区分和引用这两个人。但如果我们在他们前面加上命名空间,比如:北京的小明和上海的小明,那么区分起来就容易的多了,也不会因为重名而找错人了。
但是,JS中并不提供原生的命名空间支持。在JS中创建的任何对象都默认是全局对象。在现代的大规模JS开发中,不采用命名空间会造成非常糟糕的命名方式,比如用前缀命名函数和变量,导致代码丑陋不可读。当引入第三方库后,更可能会发生命名覆盖的情况。
简单地说,我们可以创建一个简单对象字面量来打包所有的相关函数和变量。这个简单对象字面量模拟了命名空间的作用。
var MYNAMESPACE = {
person: function(name) {
this.name = name;
this.getName = function() {
return this.name;
}
}
};
person对象被完整包含到MYNAMESPACE这个命名空间中了,使用方法也很简单
var p = new MYNAMESPACE.person("ifcode");
p.getName(); // ifcode
如此一来,通过命名空间我们就可以声明多个person对象了。