javascript名稱空間例項介紹

antzone發表於2017-03-21

在當前的ECMAScript標準中,並沒有名稱空間這個概念,但是有時候在寫類庫的時候,名稱空間這種程式碼組織形式又顯得相當重要,因為它可以有效的組織程式碼,並且無需定義不必要的全域性函式或者變數,下面就通過程式碼例項介紹一下如何在javascript模擬實現名稱空間功能,先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var nameSpace = {};
nameSpace.info = {};
nameSpace.info.Antzone = function(name) {
  //私有成員
  var _name = name;
  //訪問器
  this.getName = function() {
    return _name;
  };
  this.setName = function(name) {
    _name = name;
  };
};
//原型
nameSpace.info.Antzone.prototype = {
  done:function() {
    console.log(this.getName()+"分享互助");
  }
};
var antzone=new nameSpace.info.Antzone("螞蟻部落");
antzone.done();

以上程式碼就是模擬c#或者java中的名稱空間效果。從程式碼中可以可以體會出名稱空間的功效,這樣可以有效的避免一些全域性性變數的或者函式的重名等等其他副作用,組織程式碼也更為遍歷,也便於多庫共存。

補充說明:

上面的程式碼模擬實現名稱空間功效,但是還是不夠完美,因為這個名稱空間的引用實在太冗長了,那麼我們可以給他取一個別名,這樣更為方便一些,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var ns=nameSpace.info;
var antzone=new ns.Antzone("螞蟻部落");
antzone.done();

以上程式碼是不是看起更為簡潔一些,在引用相關內容的時候可以節省一些體力。

判斷名稱空間是否存在:

如果當前js程式碼非常龐大的時候,可能會出現名稱空間重複的情況,這往往並不是我們願意看到的,所以最好事先判斷一下指定的名稱空間是否存在,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
if(!nameSpace){
  var nameSpace={};
  nameSpace.info={}
}
else{
  if(!nameSpace.info){
    nameSpace.info={}
  }
}

關於判斷名稱空間是否已存在和生成也可以參閱javascript名稱空間簡單介紹一章節。

相關文章