基于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面向对象的方式实现的弹出层效果代码
Jan 28 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 Javascript
jQuery+css实现百度百科的页面导航效果
Dec 16 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
Sep 18 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
详解webpack异步加载业务模块
Jun 23 Javascript
vue组件中的数据传递方法
May 14 Javascript
默认浏览器设置及vue自动打开页面的方法
Sep 21 Javascript
说说如何在Vue.js中实现数字输入组件的方法
Jan 08 Javascript
jQuery 选择器用法基础入门示例
Jan 04 jQuery
jQuery实现的移动端图片缩放功能组件示例
May 01 jQuery
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数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
php实现的递归提成方案实例
2015/11/14 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
Django配置文件代码说明
2019/12/04 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
手机被没收的检讨书
2014/10/04 职场文书
学习党章的体会
2014/11/07 职场文书
求职导师推荐信范文
2015/03/27 职场文书
工程催款通知书
2015/04/17 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
python如何将mat文件转为png
2022/07/15 Python