基于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 相关文章推荐
在JavaScript中遭遇级联表达式陷阱
Mar 08 Javascript
5种处理js跨域问题方法汇总
Dec 04 Javascript
jQuery地图map悬停显示省市代码分享
Aug 20 Javascript
JavaScript的函数式编程基础指南
Mar 19 Javascript
jQuery中animate的几种用法与注意事项
Dec 12 Javascript
JavaScript利用闭包实现模块化
Jan 13 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
Bootstrap table 服务器端分页功能实现方法示例
Jun 01 Javascript
JavaScript实现音乐播放器
Aug 14 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 Session无效分析资料整理
2016/11/29 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
js网页版计算器的简单实现
2013/07/02 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python argv用法详解
2016/01/08 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
戴森英国官网:Dyson英国
2019/05/07 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
开办化妆品公司创业计划书
2013/12/26 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
2014年党务公开方案
2014/05/08 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
民生工作实施方案
2014/05/31 职场文书
最美护士演讲稿
2014/08/27 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL