當前位置:才華齋>範例>生活經驗>

javascript是如何實現名稱空間效果

生活經驗 閱讀(1.75W)

Javascript原生並不支援名稱空間,需要變通來實現。

javascript是如何實現名稱空間效果

在我們建立一個JavaScript庫時,名稱空間就顯得舉足輕重了,我們可以將組成這個JavaScript庫的零散的JavaScript檔案(*)封裝在名稱空間中,而無須定義全域性的函式或類。比如在本章節多次出現的Person,我們就可以作為庫的一部分封裝到合適的名稱空間中:

  Code 5-13:

複製程式碼 程式碼如下:

var com = {};

ava = {};

on = function(name) {

//私有成員

var _name = name;

//訪問器

ame = function() {

return _name;

};

ame = function(name) {

_name = name;

};

};

//原型

otype = {

eat:function() {

alert(ame() + " is eating something.");

},

sleep:function() {

alert(ame() + " is sleeping.");

},

walk:function() {

alert(ame() + " is walking.");

}

};

var dirk = new on("Dirk");

();

從Code 5-13中,我們得到了一個比較符合Java開發人員習慣的名稱空間,而且在例項化Person物件時,也要指定我們的命令空間路徑。

這裡說一個小技巧,如果你正在使用一個別人開發好的,且帶有比較完整的名稱空間規劃的JavaScript庫時,可能你會對每次都寫冗長的名稱空間趕到厭倦。比如說您正在使用我開發的JavaScript庫,在名稱空間下,有很多您要用到的擴充套件UI控制元件,我估計您也不希望要書寫很多次的var xxx = new ()。通過指定命名空間別名的方式,我們可以書寫更少的`重複程式碼,如Code 5-14所示的另一種例項化Code 5-13中Person的方法:

  Code 5-14:

複製程式碼 程式碼如下:

var ns = ava;

var dirk = new on("Dirk");

();

最後我將要說明的是,使用名稱空間時,需要注意的一個問題。在書寫JavaScript庫時,大多數情況下名稱空間宣告語句可能會同時出現在一個JavaScript檔案的多個位置,或者是出現多個JavaScript檔案中,但是JavaScript語言特性是最後宣告的變數會覆蓋前邊宣告的同名變數,這就需要我們注意重複宣告的問題,也就是說每次宣告名稱空間物件時,建議先判斷下這個名稱空間物件是否已經存在,如Code 5-15所示:

  Code 5-15:

複製程式碼 程式碼如下:

if (typeof ava == "undefined") var ava = {};

這樣我們就能保證“ava”物件只宣告一次了。