javascript建立名稱空間簡單介紹

螞蟻小編發表於2017-03-25

本章節介紹一下javascript如何建立模擬的名稱空間,因為js中確實沒有名稱空間這個概念。

在此不對名稱空間的概念和作用作介紹,具體可以參閱javascript名稱空間例項介紹一章節,下面介紹一下如何建立一個名稱空間。 

名稱空間可以是一級,也可以是多級。

一.建立頂級名稱空間:

[JavaScript] 純文字檢視 複製程式碼
var ns = ns || {};

如果已經存在名稱空間ns,那麼就是使用它,如果不存在,那麼就會建立一個空的物件直接量作為名稱空間,這樣可以防止原有的名稱空間被覆蓋。

二.建立二級名稱空間:

建立一級名稱空間之後,也可以在此基礎上再建立二級名稱空間,當然也可以依次類推。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
ns.Antzone = {};

既然建立了名稱空間,我們就可以在它的下面新增一些相關內容,比如方法,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var ns = ns || {};ns.Antzone = {};
ns.Antzone.func=function(){
  console.log("螞蟻部落");
}
ns.Antzone.func();

三.封裝建立名稱空間:

如果需要多級名稱空間,如果這麼一級級的手動建立,比較繁瑣,可以將建立過程封裝起來。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
function namespace(nsStr) {
  var arr=nsStr.split('.')
  var i=0
  var nameI;
  var root=window;
  for(;nameI=arr[i++];){
    if(!root[nameI]){
      root[nameI]={};
    }
    root=root[nameI];
  }
  return root;
}
var str="ns.Antzone";
var nameSpace=namespace(str);
nameSpace.func=function(){
  console.log("螞蟻部落");
}
nameSpace.func();
ns.Antzone.func();

上面的程式碼實現了封裝效果,下面對程式碼做一下簡單而極少。

一.實現原理:原理比較簡單,傳遞的字串中間用點分隔, 比如"ns.Antzone",這樣的話就是準備生成一個二級名稱空間。函式內部將這樣的字串生成一個陣列,然後以第一個陣列元素名為名稱建立一個物件,然後再將第二個陣列元素作為上一個物件的屬性,屬性值也是一個物件,以此類推,就生成了多級名稱空間。

二.程式碼註釋:

1.function namespace(nsStr) {},此函式生成多級名稱空間,傳遞的是一個字串,這個字串用點連線,兩端的字串就是相鄰兩級名稱空間的名稱。2.var arr=nsStr.split('.'),用點分隔字串生成一個陣列。

3.var i=0,宣告一個變數並賦初值為0,用作陣列的索引。

4.var nameI,宣告一個變數,用來儲存名稱空間的名字。

5.var root=window,將window物件的引用賦值給變數root。

6.for(;nameI=arr[i++];),遍歷陣列中的每一個元素。

7.if(!root[nameI]){root[nameI]={};},第一次執行是判斷window物件中是否具有指定名稱的物件,如果沒有就為window物件以nameI為名稱建立一個空物件,也就是名稱空間。8.root=root[nameI],傳遞物件的引用,將當前建立的物件重新賦值給變數root,這樣結合for迴圈就實現了建立ns物件,然後再給此物件新增一個Antzone物件的的效果。

相關文章