基于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使用查询手册
Mar 07 Javascript
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
Feb 17 Javascript
Javascript 判断客户端浏览器类型代码
Mar 01 Javascript
jQuery 图片切换插件(代码比较少)
May 07 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
Feb 26 Javascript
js和jquery如何获取图片真实的宽度和高度
Sep 28 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
Jun 19 Javascript
AngularJS的ng-click传参的方法
Jun 19 Javascript
vue2.0与bootstrap3实现列表分页效果
Nov 28 Javascript
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 jQuery
基于JavaScript实现简单抽奖功能代码实例
Oct 20 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 XML备份Mysql数据库
2009/05/27 PHP
php for 循环语句使用方法详细说明
2010/05/09 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
python 命令行传入参数实现解析
2019/08/30 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
护士实习自我鉴定
2013/10/22 职场文书
料理师求职信
2014/01/30 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
留学推荐信中文范文
2015/03/26 职场文书
《包身工》教学反思
2016/02/23 职场文书
javaScript Array api梳理
2021/03/31 Javascript
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技