JavaScript命名空間

什麼是命名空間

命名空間(英語:Namespace)表示標識符(identifier)的可見範圍。一個標識符可在多個命名空間中定義,它在不一樣命名空間中的含義是互不相干的。這樣,在一個新的命名空間中可定義任何標識符,它們不會與任何已有的標識符發生衝突,由於已有的定義都處於其它命名空間中。(維基百科ide

命名空間的做用

當一個工程很大時,既有自身的代碼,又有引用的外部庫,當自身庫和外部庫中的對象重名時,沒有命名空間將沒法區分他們。函數

通用命名空間函數

JavaScript語言的與語法中,沒有內置命名空間,但這種特徵很是容易實現。添加到命名空間的屬性可能已經存在,因此再添加屬性或者建立命名空間之間,咱們應該先檢查命名空間是否存在。spa

var FN = FN || {};

若是定義FN.fn1.fn2,則:code

var FN = FN || {};
var FN.fn1 = FN.fn1 || {};
var FN.fn1.fn2 = FN.fn1.fn2 || {};

能夠看出每建立一個命名空間或者添加屬性,都須要對對象或屬性作附加檢查,產生大量重複代碼,這違背了DRY原則,也是產生命名空間函數的緣由。咱們但願經過如下命名空間函數調用產生以上效果:對象

FN.namespace("FN.fn1.fn2")

因而咱們能夠作如下實現:ip

var FN = FN || {};
        FN.namespace = function(ns_string){
            var parts = ns_string.split("."),
            parent = FN,
            i;
            if(parts[0] === "FN"){
                left = parts.slice(1);
            }   
            for(i = 0 ;i < left.length; i += 1){            
                if(typeof parent[left[i]] === "undefined"{
                    parent[left[i]] = {};
                }
                parent = parent[left[i]] ;
            }
        }
     x = FN.namespace("FN.fn1.fn2");
相關文章
相關標籤/搜索