基于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 Uploadify上传带进度条的简单实例
Feb 12 Javascript
javascript常见操作汇总
Sep 03 Javascript
node.js中的fs.writeFileSync方法使用说明
Dec 14 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
javascript数组去重方法汇总
Apr 23 Javascript
JS实现状态栏跑马灯文字效果代码
Oct 24 Javascript
js实现简单的获取验证码按钮效果
Mar 03 Javascript
微信小程序实现星级评价效果
Dec 28 Javascript
Angular短信模板校验代码
Sep 23 Javascript
nuxt静态部署打包相对路径操作
Nov 06 Javascript
微信小程序实现购物车功能
Nov 18 Javascript
JavaScript十大取整方法实例教程
Dec 03 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
php预定义常量
2006/12/25 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
2014/12/31 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
js实现返回顶部效果
2017/03/10 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
Python三级菜单的实例
2017/09/13 Python
python实现用户管理系统
2018/01/10 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
python的常见矩阵运算(小结)
2019/08/07 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
小学运动会表扬稿
2014/01/19 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript