命名空间是通过为项目或库创建一个全局对象,然后将所有的功能添加到该全局变量中。同时有效防止函数名、类名和其他人冲突。
在学习JavaScript命名空间模式之前,我们先来了解简单的命名空间。
简单的命名空间
由于JavaScript没有文件作用域,不同的函数分散在不同的文件中,甚至由不同的人编写,重名的概率大大增加。是不是足够小心就可以了呢?也不尽然,还有些意外情况,比如经常会用到继承,于是写了一个没出现过的函数名extend,不料在EcmaScript5中加入了extend函数,命名空间的必要性就体现出来了。
JavaScript有函数的作用域,可以利用这点把自定义的函数写到一个函数体内,这样函数内的变量、对象、函数就像在一个命名空间内一样和外部隔离。1
2
3
4
5
6
7
8
9<input type="button" value="test" onclick="(new namespace()).alert();"/>
<script type="text/javascript">
function namespace(){
this.alert=function(){
onsole.log('test');
}
}
</script>
这样自定义的alert方法就不会和window的alert冲突了。