• 如何让js不产生冲突,避免全局变量的泛滥,合理运用命名空间


    为了避免变量之间的覆盖与冲突,可以生成命名空间,命名空间是一种特殊的前缀,在js中,通过{ }对象实现。

    在不同的匿名函数中,根据功能声明一个不同的命名空间,每个匿名函数中GLOBAL对象的属性都不直接挂在GLOBAL上,而是挂在次匿名函数的命名空间下,如:

    1. <script type="text/javascript">  
    2.    var GLOBAL={}  
    3. </script>  
    4. <script type="text/javascript">  
    5.    (function(){  
    6.       var a=123a1=256;  
    7.       GLOBAL.A={}  
    8.       GLOBAL.A.str=a;  
    9.    })();  
    10. </script>  
    11.   
    12. <script type="text/javascript">  
    13.    (function(){  
    14.       var b1=123b2=256;  
    15.       GLOBAL.B={}  
    16.       GLOBAL.B.str=a;  
    17.    })();  
    18. </script>  

    如果同一个匿名函数中的程序非常复杂,变量名很多,命名空间可以进一步扩展,生成二级命名空间:

    1. <script type="text/javascript">  
    2.     var GLOBAL={}  
    3. </script>  
    4. <script type="text/javascript">  
    5.    (function(){  
    6.       var a=123a1=256;  
    7.       GLOBAL.A={};  
    8.       GLOBAL.A.CAT={};  
    9.       GLOBAL.A.DOG={};  
    10.       GLOBAL.A.CAT.name="mini";  
    11.       GLOBAL.A.CAT.move=function(){  
    12.       }  
    13.       GLOBAL.A.DOG.name="mini";  
    14.       GLOBAL.A.DOG.move=function(){  
    15.       }  
    16.    })();  
    17. </script>  


    因生成命名空间是非常常用的功能,可以进一步将生成命名空间的功能定义成一个函数,方便调用,如下:

    1. <script type="text/javascript">  
    2.    var GLOBAL={}  
    3.    GLOBAL.namespace=function(str){  
    4.       var arr=str.split("."), o=GLOBAL;  
    5.             for(i=arr[0]=="GLOBAL"?1:0;i<arr.length; i++){  
    6.       o[arr[i]]=o[arr[i]] || {};  
    7.       o=o[arr[i]];  
    8.       }  
    9.    }  
    10. </script>  


     

    调用命名空间具体操作:

    1. <script type="text/javascript">  
    2. //=============================================================  
    3. //     功能A  
    4. //     工程师甲  
    5. //     email:ctkl68945@gmail.com     msn:ctkl68945@hotmail.com"  
    6. //     2012-11-06  
    7. //=============================================================  
    8.    
    9. (function(){  
    10.    var a=123a1="hello world";  
    11.    GLOBAL.namespace("A.CAT");  
    12.    GLOBAL.namespace("A.DOG");  
    13.    GLOBAL.A.CAT.name="mini";  
    14.    GLOBAL.A.CAT.move=function(){  
    15.    }  
    16.    GLOBAL.A.DOG.name="mini";  
    17.    GLOBAL.A.DOG.move=function(){  
    18.    }  
    19.    GLOBAL.A.str=a;  
    20.    GLOBAL.A.str1=a1;  
    21. })();  

    依次类似,无论多人的直接团队开发,还是个人的间接团队合作,都需要良好的可维护性。

    1、添加必要的代码注释

    2、让JS不产生冲突,需避免全局变量的泛滥,合理使用命名空间

  • 相关阅读:
    【设计模式】第九篇:组合模式解决层级关系结构问题
    【设计模式】第八篇:喝豆浆就是装饰者模式吗?
    【设计模式】第七篇:和我一起简单认识桥接模式
    【设计模式】第六篇:来康康适配器模式
    【设计模式】第五篇:什么是原型模式?浅提浅拷贝和深拷贝
    【计算机网络】学习笔记,第三篇:数据链路层(谢希仁版)
    一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
    单例模式的几种实现And反射对其的破坏
    缓存穿透、击穿、雪崩什么的傻傻分不清楚?看了这篇文后,我明白了
    图文并茂,带你深入了解AQS的源码
  • 原文地址:https://www.cnblogs.com/fengyv/p/3789414.html
Copyright © 2020-2023  润新知