本文實例講述了JavaScript命名空間模式。分享給大家供大家參考,具體如下:
前言
命名空間可以被認為是唯一標識符下代碼的邏輯分組。為什么會出現命名空間這一概念呢?因為可用的單詞數太少,并且不同的人寫的程序不可能所有的變量都沒有重名現象。在JavaScript中,命名空間可以幫助我們防止與全局命名空間下的其他對象或變量產生沖突。命名空間也有助于組織代碼,有更強的可維護性和可讀性。本文旨在探討JavaScript里的幾種常見命名空間模式,為我們提供一個思路。
JavaScript執行環境有很多獨特之處,全局變量和函數的使用就是其中之一。JavaScript的執行環境由各種各樣的全局變量構成,這些全局變量先于函數執行環境而創建。這些全局變量都掛載于“全局對象”下,在瀏覽器中,window對象就等同于全局對象。那么,在全局作用域中聲明的任何變量和函數都是window對象的屬性,當名稱有沖突時,就會產生一些不可控的問題。全局變量會帶來以下問題:
命名沖突
代碼的脆弱性
難以測試
在編程開發中合理的使用命名空間,可以避免相同的變量或對象名稱產生的沖突。而且,命名空間也有助于組織代碼,有更強的可維護性和可讀性。JavaScript中雖然沒有提供原生的命名空間支持,但我們可以使用其他的方法(對象和閉包)實現類似的效果。下面就是一些常見的命名空間模式:
1.單一全局變量
JavaScript中一個流行的命名空間模式是選擇一個全局變量作為主要的引用對象。因為每個可能的全局變量都成為唯一全局變量的屬性,也就不用再創建多個全局變量,那么也就避免了和其他聲明的沖突。
單一全局變量模式已經在不少的JavaScript類庫中使用,如:
YUI定義了唯一的YUI全局對象 jQuery定義了和jQuery,和jQuery,由其他類庫使用時使用jQuery Dojo定義了一個Dojo全局變量 Closure類庫定義了一個goog全局對象 Underscore類庫定義了一個_ 全局對象示例如下:
var myApplication = (function() { function() { // *** }, return { // ** }})();雖然單一全局變量模式適合某些情況,但其最大的挑戰是確保單一全局變量在頁面中是唯一使用的,不會發生命名沖突。
2.命名空間前綴
命名空間前綴模式其思路非常清晰,就是選擇一個獨特的命名空間,然后在其后面聲明聲明變量、方法和對象。示例如下:
var = myApplication_propertyA = {};var = myApplication_propertyA = {};function myApplication_myMethod() { // ***}從某種程度上來說,它確實減少了命名沖突的發生概率,但其并沒有減少全局變量的數目。當應用程序規模擴大時,就會產生很多的全局變量。在全局命名空間內,這種模式對其他人都沒有使用的這個前綴有很強的依賴,而且有些時候也不好判斷是否有人已經使用某個特殊前綴,在使用這種模式時一定要特別注意。
新聞熱點
疑難解答
圖片精選