利用命名空间来防止变量名冲突――读《编写高质量代码》总结
2011-11-17 00:43
435 查看
多人一起开发js文件时,由于所起的变量名都是window的属性(即全局变量),容易重名冲突,解决办法是每个程序员所写的代码都放在匿名函数中,形式为(function(){})();这样包在匿名函数中的变量为局部变量,不会与其他程序员的变量相冲突。
如果程序员A要引用程序员B写的某个变量,如何解决呢?
解决的办法是设计一个全局变量,利用全局变量的桥梁作用,使得不同程序段可以通信。如何设计全局变量呢,可以采用命名空间的方式:
<script>
var GLOBAL = {};
GLOBAL.namespace = function(str){
var arr = str.split("."), o = GLOBAL;
for(i=(arr[0]="GLOBAL")?1:0; i<arr.length; i++){
o[arr[i]] = o[arr[i]] || {};
o = o[arr[i]];
}
}
</script>
使用方法:当程序员A写的程序:
<script>
(function(){
var a = "abc",b="123";
GLOBAL.namespace("A.CAT");
GLOBAL.A.str2 = a;
GLOBAL.A.str = b;
})();
</script>
程序员B就可以引用GLOBAL.A.str2和GLOBAL.A.str了。
如果程序员A要引用程序员B写的某个变量,如何解决呢?
解决的办法是设计一个全局变量,利用全局变量的桥梁作用,使得不同程序段可以通信。如何设计全局变量呢,可以采用命名空间的方式:
<script>
var GLOBAL = {};
GLOBAL.namespace = function(str){
var arr = str.split("."), o = GLOBAL;
for(i=(arr[0]="GLOBAL")?1:0; i<arr.length; i++){
o[arr[i]] = o[arr[i]] || {};
o = o[arr[i]];
}
}
</script>
使用方法:当程序员A写的程序:
<script>
(function(){
var a = "abc",b="123";
GLOBAL.namespace("A.CAT");
GLOBAL.A.str2 = a;
GLOBAL.A.str = b;
})();
</script>
程序员B就可以引用GLOBAL.A.str2和GLOBAL.A.str了。
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议123:程序集不必与命名空间同名
- 编写高质量代码改善C#程序的157个建议——建议124:考虑在命名空间中使用复数
- 编写高质量代码改善C#程序的157个建议——建议138:事件和委托变量使用动词或形容词短语命名
- 编写高质量OC代码52建议总结:19.使用清晰而协调的命名方式
- 编写高质量代码改善C#程序的157个建议——建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间
- 编写高质量代码改善C#程序的157个建议——建议122:以<Company>.<Component>为命名空间命名
- C#基础知识C#中的类是利用命名空间组织起来的。命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。 命名空间声明 用namespace 关键字用于声明一个命名空间。此命名空间范围允
- 解决ambiguous symbol命名空间中类名、变量名冲突的问题
- 编写高质量代码改善C#程序的157个建议——建议151:使用事件访问器替换公开的事件成员变量
- 编写高质量代码改善C#程序的157个建议——建议130:以复数命名枚举类型,以单数命名枚举元素
- 编写高质量OC代码52建议总结:17.实现describtion方法
- 编写高质量代码总结
- 利用eclipse编写高质量的java代码
- 编写高质量代码——“零星”总结(续2)
- 编写高质量的代码——从命名入手
- 《编写高质量代码》CSS部分总结
- 【Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法】总结(一)
- Effective Objective-C 2.0 编写高质量iOS与OS X代码 在对象内部尽量直接访问实例变量
- 编写高质量OC代码52建议总结:11.理解objc_msgSend的作用(消息机制)
- 编写高质量的代码——从命名入手