基于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 相关文章推荐
js 字符串转化成数字的代码
Jun 29 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
Apr 24 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
Jun 08 Javascript
jquery属性过滤选择器使用示例
Jun 18 Javascript
JQuery对表单元素的基本操作使用总结
Jul 18 Javascript
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
Mar 02 Javascript
JavaScript手风琴页面制作
May 17 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
May 22 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
Sep 06 jQuery
详解express使用vue-router的history踩坑
Jun 05 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 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
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
深入理解PHP中的count函数
2016/05/31 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
JS实现随机抽选获奖者
2019/11/07 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
波兰珠宝品牌:YES
2019/08/09 全球购物
个人自我评价分享
2013/12/20 职场文书
英文求职信写作小建议
2014/02/16 职场文书
认购协议书范本
2014/04/22 职场文书
我的理想演讲稿
2014/04/30 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
初三毕业感言
2015/07/31 职场文书
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python