JavaScript-命名空间
程序员文章站
2022-07-13 17:57:23
...
命名空间:管理变量,防止污染全局,适合模块开发。
一个网页,软件的开发不可能是一个工程师完成的,那么多个工程师完成同一个项目的时候,命名重复问题肯定是有的,那么如何解决这个问题了。
看下面代码
var name='lyc';
var init=(function() {
var name='cyl';
function callName() {
console.log(name);
}
return function() {
callName();
}
}())
init();
打印结果是cyl,清楚闭包的应该知道了,这里形成了闭包callName用的是那个立即执行函数的作用域链,就找到name了,
而外面是找不到里面的name的,这里就很好的利用了闭包的性质,避免了命名问题,用于模块化开发,避免全局污染。
我们只需要把接口(函数)返回到外面,就可以使用你实现的功能了。
这是别人实际开发的时候实现的一个功能,就是这样做的。
还有一种方法,看一下如下代码:
var OBJ={
temp1:{
Case1:{
name:'cyl',
age:19,
school:'wust',
sex:'male'
},
Case2:{
name:'cyh',
age:19,
school:'wust',
sex:'famale'
}
}
}
我们把一个工程师需要用的变量啊,函数啊什么的全部放在一个对象中,不同的程序员使用不同的“空间”,互相不干扰。
使用with(target)方法调用。
with(target) 可以将下面的代码“放在”target的作用域连顶端,也就是说下面代码使用的变量函数将会沿着target的作用域链寻找。
var OBJ={
temp1:{
Case1:{
name:'cyl',
age:19,
school:'wust',
sex:'male'
},
Case2:{
name:'cyh',
age:19,
school:'wust',
sex:'famale'
}
}
}
with(OBJ.temp1.Case1) {
console.log(name+" "+sex);
}
with(OBJ.temp1.Case2) {
console.log(name+" "+sex);
}
是不是也可以勒!不过方法没有上面的第一种好咯,而且在ES5严格标准下,with()方法被禁用了。
上一篇: 命名空间
下一篇: thinkphp公共命名空间图文详解