基于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计算两个时间之间天数差的实例代码
Nov 19 Javascript
js日期联动示例
May 02 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
Jun 05 Javascript
js仿黑客帝国字母掉落效果代码分享
Nov 08 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
Jun 09 Javascript
JS实现图片放大缩小的方法
Feb 15 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
Jun 26 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
May 22 Javascript
layui的table单击行勾选checkbox功能方法
Aug 14 Javascript
在layui下对元素进行事件绑定的实例
Sep 06 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 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无限级分类方法及代码
2013/06/21 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php框架知识点的整理和补充
2021/03/01 PHP
javascript jQuery插件练习
2008/12/24 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
python数据化运营的重要意义
2019/11/25 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
工商管理系学生的自我评价分享
2013/11/29 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
红旗方阵解说词
2014/02/12 职场文书
会计求职信范文
2014/05/24 职场文书
模范教师材料大全
2014/12/16 职场文书
教师师德表现自我评价
2015/03/05 职场文书
如何写观后感
2015/06/19 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python