基于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 相关文章推荐
jquery 简短右键菜单 多浏览器兼容
Jan 01 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
Mar 04 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 Javascript
微信小程序 scroll-view隐藏滚动条详解
Jan 16 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
react router4+redux实现路由权限控制的方法
May 03 Javascript
vue组件jsx语法的具体使用
May 21 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
超简单的微信小程序轮播图
Nov 22 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
Aug 22 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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聊天室技术
2006/10/09 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
PHP的引用详解
2015/02/22 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解Python3中字符串中的数字提取方法
2017/01/14 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
python机器学习之随机森林(七)
2018/03/26 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
python3字符串操作总结
2019/07/24 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
django 外键创建注意事项说明
2020/05/20 Python
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
几个人围成一圈的问题
2013/09/26 面试题
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
房产委托公证书样本
2014/04/04 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书