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

來源:互聯網
上載者:User

之前看到網易還是新浪還是什麼什麼網站來著,也是用類似這種東西的,當時對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]] || {} //如果當前對象已經操作就用當前對象,不存在就賦值Null 物件
             //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;
  }

當然只是我的理解,如果哪裡不是很對,還請各位大俠幫忙指出,以免誤導了大家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.