基于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 相关文章推荐
GreyBox技术总结(转)
Nov 23 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
Oct 11 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
Aug 08 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
angularjs 表单密码验证自定义指令实现代码
Oct 27 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 Javascript
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
详解在Node.js中发起HTTP请求的5种方法
Jan 10 Javascript
vue中对象数组去重的实现
Feb 06 Javascript
Antd下拉选择,自动匹配功能的实现
Oct 24 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中文分词的简单实现代码分享
2011/07/17 PHP
解析php中memcache的应用
2013/06/18 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python装饰器知识点补充
2018/05/28 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
Python timeit模块原理及使用方法
2020/10/10 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
考试不及格检讨书
2014/01/09 职场文书
班长竞选演讲稿
2014/04/24 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
法定代表人身份证明书
2014/09/10 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
2015年植树节活动总结
2015/02/06 职场文书
老人节主持词
2015/07/04 职场文书
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
python scrapy简单模拟登录的代码分析
2021/07/21 Python
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server