基于JavaScript 下namespace 功能的简单分析


Posted in Javascript onJuly 05, 2013

之前看到网易还是新浪还是什么什么网站来着,也是用类似这种东西的,当时对js只是九牛一毛的水平,当场被吓傻了。
但这次,我打算亲自分析下,以后在看到就不会迷茫了。

//调用例子:bradio.namespace("bradio.lang.array");
 //下面是百度编译后的源码,变量都是a,b,c,d...之后我会重新写一个规范点的。
 //好了,开始分析
 bradio.namespace = function () { //创建命名空间
     var a = arguments, //["bradio.lang.array"]
         b = null, //用于存放上一级对象
         c, d, e, f; //c是计数器,d是内层循环的计数器,e是拆分后命名空间数组,f是arguments参数长度
     c = 0;
     for (f = a.length; c < f; c++) {
         e = ("" + a[c]).split("."); //拆分命名空间,拆分后 ["bradio", "lang", "array"]
         b = bradio; //基础对象,基于这个对象进行命名空间的添加
         for (d = "bradio" == e[0] ? 1 : 0; d < e.length; d++) //如果第一个是bradio, 就第二个开始遍历 ["bradio","lang","array"]
             b[e[d]] = b[e[d]] || {}, b = b[e[d]]
             //其实相当于
             //b[e[d]] = b[e[d]] || {} //如果当前对象已经操作就用当前对象,不存在就赋值空对象
             //b = b[e[d]] //用字对象覆盖b,接下去的循环基于子对象添加命名空间
     }
     return b//返回最后一层对象
 };

下面是整理后的,能看懂的版本
//bradio.namespace("bradio.lang.array");
  bradio.namespace = function () { //创建命名空间
      var args = arguments,
          parent = null,
          arr, i, j, len;
      for (i=0, len = args.length; i < len; i++) {
          arr = ("" + args[i]).split(".");
          parent = bradio;
          for(j = "bradio" == arr[0] ? 1 : 0; j < arr.length; j++) {
              parent[ arr[j] ] = parent[ arr[j] ] || {};
              parent = parent[ arr[j] ];
          }
      }
      return parent;
  }

当然只是我的理解,如果哪里不是很对,还请各位大侠帮忙指出,以免误导了大家。
Javascript 相关文章推荐
在JavaScript中获取请求的URL参数[正则]
Dec 25 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
Jquery日历插件制作简单日历
Oct 28 Javascript
jQuery实现textarea自动增长宽高的方法
Dec 18 Javascript
jQuery树形控件zTree使用小结
Aug 02 Javascript
简单模拟node.js中require的加载机制
Oct 27 Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 Javascript
Vue页面骨架屏的实现方法
May 22 Javascript
微信小程序实现星级评分和展示
Jul 05 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
js正则匹配多个全部数据问题
Dec 20 Javascript
javascript 数组(list)添加/删除的实现
Dec 17 Javascript
javascript基础之查找元素的详细介绍(访问节点)
Jul 05 #Javascript
js文件缓存之版本管理详解
Jul 05 #Javascript
单击复制文字兼容各浏览器的完美解决方案
Jul 04 #Javascript
把input初始值不写value的具体实现方法
Jul 04 #Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
Jul 04 #Javascript
简单实用jquery版三级联动select示例
Jul 04 #Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 #Javascript
You might like
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
js实现各浏览器全屏代码实例
2018/07/03 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
Vue实现日历小插件
2019/06/26 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
通过源码分析Python中的切片赋值
2017/05/08 Python
python解析含有重复key的json方法
2019/01/22 Python
python实现双人五子棋(终端版)
2020/12/30 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
办公文员的工作岗位职责
2013/11/12 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
教师申诉制度
2014/01/29 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS