我很瞭解JavaScript的基本概念,但我無法理解某些高級概念。我想知道的概念是命名空間。它何時有用?我應該如何使用它?我會很感激任何解釋。命名空間背後的概念是什麼?
回答
我會用一個例子來回答。
你要墊一個號碼,這樣它的2
位長,
function pad(x) {
return ('00' + x).slice(-2);
}
pad(3); // "03"
你必須在網站上一些其他的代碼,片數n
位數
function pad(x, n) {
x = '' + x;
n = n + 1 - x.length;
if (n < 0) n = 0;
return new Array(n).join('0') + x;
}
pad(3, 5); // "00003"
現在,如果你有發生這兩段代碼在同一頁上?
隨着他們此刻是順序,你會得到
pad(3); // RangeError: Invalid array length
因爲功能具有相同的名稱,所以錯了一個被使用。
如何避免這些問題?命名空間!如果您將所有代碼放入命名空間中,則唯一需要擔心的衝突是命名空間的選定名稱,其他所有命名都是根據它命名的,因此不會發生衝突。
命名空間中的JavaScript 可以在許多方式來實現,但通常歸結爲屬性添加到對象
// make an Object to be your namespace
var myNamespace = {};
// define your thing of interest within namespace
myNamespace.pad = function (x) {return ('00' + x).slice(-2);};
// and then use it
myNamespace.pad(3); // "03"
要回答有關何時有用的問題,當您使用其他JavaScript庫時,在JavaScript中使用名稱空間可能至關重要的一種方案是。你想避免你的代碼和他們的代碼之間的命名衝突,以及它們之間的衝突。
要在這個問題的詳細討論引用Addy Osmani:
在JavaScript中,在企業級命名空間是至關重要的,因爲它使用在頁面上的其他腳本的情況下,打破保護你的代碼是非常重要的與您相同的變量或方法名稱。如今,隨着第三方標籤數量的不斷增加,這可能是我們在職業生涯中需要解決的一個常見問題。作爲一個行爲良好的全球名稱空間的「公民」,您也儘可能地不要因爲相同的問題而阻止其他開發人員的腳本執行。
感謝。我一直在通過教程,但我仍然不明白如何實現它。你是怎樣做的? –
那麼命名空間只是在本地存儲所有名稱並且保護外部來源? –
@ user2297366在Javascript中您只需創建一個具有唯一名稱(名稱空間)的對象,然後將您的代碼放入該對象(名稱空間)。爲了避免你的代碼和他們的代碼之間的命名衝突,以及其中,正如DOK所說的。所以當你想使用一段代碼時,你可以像這樣...'someSpecialName.myObjectName.myMethod();' – Givi
- 1. java iterator背後的概念是什麼?
- 2. INotifyPropertyChanged背後的概念是什麼?
- 3. 編程中「上下文」概念背後的一般概念是什麼?
- 4. 什麼是概念?
- 5. mod_rewrite和漂亮的url背後的概念是什麼?
- 6. Dumpsys meminfo中出現的「Lost RAM」背後的概念是什麼?
- 7. JavaScript中的Flash Sockets背後的概念是什麼(比如socket.io)?
- 8. WaitHandle背後的基本概念是什麼?
- 9. XSS背後的一般概念是什麼?
- 10. rails'act_as背後的基本概念是什麼?
- 11. 視頻分發服務背後的概念是什麼?
- 12. 文件指針或流指針背後的概念是什麼?
- 13. 什麼是背後的概念:類型 - 元素 - 鏡像
- 14. javascript參數背後的概念是什麼?
- 15. zip壓縮背後的概念是什麼?
- 16. 可以命名空間(是/滿足a)概念嗎?
- 17. ANCS:PositiveAction的概念是什麼?
- 18. 背後的概念謎題
- 19. 什麼是冒泡概念?
- 20. IMvcServiceLocator的命名空間是什麼?
- 21. testng.xml的命名空間是什麼?
- 22. DispatcherTimer類的命名空間是什麼?
- 23. 什麼是aerospike中的命名空間
- 24. 什麼是CreateIfNotExists的命名空間?
- 25. NUnit CollectionAssert的命名空間是什麼?
- 26. Tuple2的概念性目的是什麼?
- 27. Git的概念框架是什麼?
- 28. Chain Complete的概念是什麼?
- 29. Kotlin意圖的概念是什麼?
- 30. 什麼是HATEOAS的實際概念?
也許你想添加一個創建名稱空間的例子嗎? – joakimdahlstrom