2010-10-31 69 views
1

模仿jQuery等命名空間的JavaScript框架是否會進行一些名稱空間衝突檢測?如果不是我應該自己管理它?JavaScript中的「命名空間」碰撞檢測?

如果是的話阻止這樣的框架自己檢測到這種衝突?

+0

我沒有時間自己解釋這個,但看看Paul Irish的視頻[我從jQuery資源中學到的10件事](http://www.youtube.com/watch?v=i_qE1iAmjFg #t = 12m35)他在那裏談論'noConflict'。另請參閱他的[自己的博客](http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/)以獲取更多鏈接和評論。 – 2010-10-31 13:28:38

+0

非常感謝,那就是我一直在尋找的。 – user310291 2010-10-31 19:36:55

回答

5

JavaScript的命名空間通常是通過使用對象和封閉模仿,並經常與自我調用函數初始化:

var myNamespace = (function() { 
    var _name = 'Bob'; 

    return { 
     somePublicMethod: function() { 
     return 'Hello, ' + _name; 
     } 
    }; 
})(); 

alert(myNamespace.somePublicMethod()); 

不幸的是,如果你重新定義命名空間的變量,有針對任何警告。什麼,你可以真正做的是檢查是否命名空間變量已被定義,並拋出一個異常或引發錯誤,如果它是:

if (typeof myNamespace !== 'undefined') { 
    var myNamespace = (function() { 
     // ... 
    })(); 
} 
else { 
    throw new Error("Whoops! myNamespace already exists."); 
} 
+0

'!========'? :) – galambalazs 2010-10-31 12:45:43

+0

@ galambalazs:lol :)修正:) – 2010-10-31 12:46:33

+0

這不是真的倒退嗎?你不檢查命名空間==='undefined'然後定義它,否則拋出一個錯誤? – kakridge 2012-08-09 14:28:31

1

考慮未來與發展標準,其中整個團隊如何你同意將調用你的名字空間。另外,我發現在實際實現它們之前查看數據結構或命名空間的任何更改都很有用。

+0

但是,如果你的框架像jquery一樣分佈在世界各地,這是不可能的。 – user310291 2010-10-31 19:34:58