首頁  >  文章  >  web前端  >  javascript簡單實作命名空間效果_javascript技巧

javascript簡單實作命名空間效果_javascript技巧

WBOY
WBOY原創
2016-05-16 16:56:551098瀏覽

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

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

Code 5-13:

複製程式碼



複製程式碼



複製碼🎜>var com = {};
com.anyjava = {};
com.anyjava.Person = function(name) {
    //私人成員
    var _name = name; name;

    //存取器
    this.getName = function() {
        return _name;
    _name = name;
    };
};
//原型
com.anyjava.Person.prototype = {
    eat:function() {
   some   eat:function() {
   some  ");
    },
    sleep:function() {
        alert(this.getName() " 是>        alert(this.getName() " is walking.");
    }
};
var dirk = new com.anyjava. ;


從Code 5-13中,我們得到了一個比較符合Java開發人員習慣的命名空間,而且在實例化Person物件時,也要指定我們的命令空間路徑。
這裡說一個小技巧,如果你正在使用一個別人開發好的,且帶有比較完整的命名空間規劃的JavaScript庫時,可能你會對每次都寫冗長的命名空間趕到厭倦。比方說您正在使用我開發的JavaScript庫,在com.anyjava.control.ui命名空間下,有很多您要用到的擴展UI控件,我估計您也不希望要書寫很多次的var xxx = new com .anyjava.control.ui.XXX()。透過指定命名空間別名的方式,我們可以書寫更少的重複程式碼,如Code 5-14所示的另一種實例化Code​​ 5-13中Person的方法:


Code 5-14:

複製程式碼



複製程式碼

複製碼🎜>var ns = com.anyjava;var dirk = new ns.Person("Dirk");
dirk.eat();

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


複製程式碼

複製程式碼複製程式碼複製碼🎜>if (typeof com.anyjava == "undefined") var com.anyjava = {};這樣我們就能保證「com.anyjava」物件只宣告一次了。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn