如何讓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不產生沖突,需避免全局變量的泛濫,合理使用命名空間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM