JavaScript命名空间namespace的实现方法

网上有很多了,这里给出一个,其实思路就是A={}; A.b={};其实b是A的一个属性。只是做了一些封装,最后的效果是可以直接定义多个namespace:

   1:  My.namespace("Company", "Company.Feed", "Company.Feed.Messaging");

 

具体的实现方法,用到了arguments, eval等JavaScript函数

   1:  //namespace的实现
   2:  var MyFramework = {};
   3:   
   4:  MyFramework.namespace=function(){ 
   5:      var a=arguments, o=null, i, j, d, rt; 
   6:      for (i=0; i<a.length; ++i) { 
   7:          d=a[i].split("."); 
   8:          rt = d[0]; 
   9:          eval("if (typeof (" + rt + ") == 'undefined'){" + rt + "= {};} o = "+ rt + ";"); 
  10:          for (j=1; j<d.length; ++j) { 
  11:              o[d[j]]=o[d[j]] || {}; 
  12:              o=o[d[j]]; 
  13:            } 
  14:        } 
  15:    };

 

使用方法

   1:  MyFramework.namespace("MyCompany.feed", "IBM.common"); //直接定义多个namespace
   2:                
   3:  MyCompany.feed =
   4:   {
   5:       alert: function (msg) {
   6:           alert(msg);
   7:       },
   8:   
   9:       load: function () {
  10:       }
  11:   
  12:   };
  13:               
  14:  MyCompany.feed.test = function (t){
  15:    alert("MyCompany.feed.test : "+t);
  16:  };
  17:   
  18:  IBM.common.messging = function (t){
  19:    alert("IBM.common.messging: "+t);
  20:  };
  21:   
  22:  MyCompany.feed.test("def");
  23:  MyCompany.feed.alert("abc");    
  24:  IBM.common.messging("fff");

posted on   Mainz  阅读(987)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示