基于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的键盘控制事件说明
Apr 15 Javascript
JQuery1.6 使用方法三
Nov 23 Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 Javascript
jquery validate在ie8下的bug解决方法
Nov 13 Javascript
JavaScript获取当前网页最后修改时间的方法
Apr 03 Javascript
jQuery聚合函数实例
May 21 Javascript
jQuery图片轮播滚动切换代码分享
Apr 20 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
vue组件父与子通信详解(一)
Nov 07 Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 Javascript
vue视频播放暂停代码
Nov 08 Javascript
JavaScript switch语句使用方法简介
Dec 30 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基础知识:类与对象(1)
2006/12/13 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
python清除字符串里非数字字符的方法
2015/07/02 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
某科技软件测试面试题
2013/05/19 面试题
新员工培训个人的自我评价
2013/10/09 职场文书
高中毕业自我鉴定
2013/12/13 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
招聘单位介绍信
2014/01/14 职场文书
行政主管职责范本
2014/03/07 职场文书
优秀团员自我评价
2015/03/10 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
python迷宫问题深度优先遍历实例
2021/06/20 Python