国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

基于JavaScript 下namespace 功能的簡單分析

2024-05-06 15:48:37
字體:
來源:轉載
供稿:網友
前些天在剝離 百度隨心聽 的播放器引擎時,看到了一個namespace方法,覺得新奇,當然只是對于我自己而言,我入門js不久,經驗尚淺

之前看到網易還是新浪還是什么什么網站來著,也是用類似這種東西的,當時對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;
  }


當然只是我的理解,如果哪里不是很對,還請各位大俠幫忙指出,以免誤導了大家。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 三都| 乌拉特中旗| 余江县| 北票市| 武邑县| 贞丰县| 凌海市| 丹寨县| 无极县| 南靖县| 镇平县| 公主岭市| 昔阳县| 宜宾市| 句容市| 米泉市| 中江县| 鸡泽县| 百色市| 庆云县| 新民市| 秦安县| 宿迁市| 沂水县| 增城市| 房产| 黄龙县| 辽阳县| 马鞍山市| 宣威市| 册亨县| 开平市| 龙海市| 科技| 长沙县| 平利县| 巴里| 锡林浩特市| 宽城| 郓城县| 当雄县|