基于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 相关文章推荐
TreeView 用法(有代码)(asp.net)
Jul 15 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
实用框架(iframe)操作代码
Oct 23 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
Dec 15 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
Feb 26 Javascript
js实现简单排列组合的方法
Jan 27 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
Mar 15 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 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 ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
Python用threading实现多线程详解
2017/02/03 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
英国网上超市:Ocado
2020/03/05 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
洗煤厂厂长岗位职责
2014/01/03 职场文书
企业新年寄语
2014/04/04 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL