2013-06-29 95 views

回答

3

我會用一個例子來回答。

你要墊一個號碼,這樣它的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" 
+0

也許你想添加一個創建名稱空間的例子嗎? – joakimdahlstrom

2

要回答有關何時有用的問題,當您使用其他JavaScript庫時,在JavaScript中使用名稱空間可能至關重要的一種方案是。你想避免你的代碼和他們的代碼之間的命名衝突,以及它們之間的衝突。

要在這個問題的詳細討論引用Addy Osmani

在JavaScript中,在企業級命名空間是至關重要的,因爲它使用在頁面上的其他腳本的情況下,打破保護你的代碼是非常重要的與您相同的變量或方法名稱。如今,隨着第三方標籤數量的不斷增加,這可能是我們在職業生涯中需要解決的一個常見問題。作爲一個行爲良好的全球名稱空間的「公民」,您也儘可能地不要因爲相同的問題而阻止其他開發人員的腳本執行。

+0

感謝。我一直在通過教程,但我仍然不明白如何實現它。你是怎樣做的? –

+0

那麼命名空間只是在本地存儲所有名稱並且保護外部來源? –

+1

@ user2297366在Javascript中您只需創建一個具有唯一名稱(名稱空間)的對象,然後將您的代碼放入該對象(名稱空間)。爲了避免你的代碼和他們的代碼之間的命名衝突,以及其中,正如DOK所說的。所以當你想使用一段代碼時,你可以像這樣...'someSpecialName.myObjectName.myMethod();' – Givi