基于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 相关文章推荐
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
JavaScript DOM学习第四章 getElementByTagNames
Feb 19 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
Feb 24 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
May 06 Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 Javascript
根据配置文件加载js依赖模块
Dec 29 Javascript
jQuery插件datepicker 日期连续选择
Jun 12 Javascript
jquery判断输入密码两次是否相等
Apr 22 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
js实现下拉菜单效果
Mar 01 Javascript
深度解读vue-resize的具体用法
Jul 08 Javascript
react 项目中引入图片的几种方式
Jun 02 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+mysql实现简单的增删改查功能
2015/07/13 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
Python八皇后问题解答过程详解
2019/07/29 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
Django values()和value_list()的使用
2020/03/31 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
成人大专自我鉴定范文
2013/10/19 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
离婚起诉状范本
2015/05/19 职场文书
公司备用金管理制度
2015/08/04 职场文书
体育部部长竞选稿
2015/11/21 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android