2017-09-07 92 views
0

當使用模塊模式來擴展模塊,我們做這樣的事情:的Javascript模塊模式和空對象

var NewModule = (function (Main) { 

    Main.extension = function() {}; 
    return Main; 

})(Main || {}); 

那的偉大工程的問題是,如果主沒有聲明,我們通過傳遞一個避免錯誤空物體Main || {}。我們如何防止這種依賴性被打破?當然,我們一開始不會有任何錯誤,但如果我們無法將我們的擴展附加到Main,我們會遇到其他類型的錯誤。

+0

是否希望偶爾不帶參數地調用它,並使用擴展方法獲取對象? –

+0

可能更好的方法,但我的直接感覺就是,我猜測,或者a)如果你的根依賴項丟失(而不是忽略它並傳遞一個空對象)或者b)檢查其他地方的缺失依賴關係與根兄弟姐妹 –

+0

@RobM。這是正確的,Main'的主要目標是在未來需要時提供所有可用的方法。 –

回答

1

如果目標是延長Main,你通常不會分配給NewModule。你寧願做

// a.js 
var Main = (function (localMain) { 
    localMain.extensionA = function() {}; 
    return localMain; 
})(Main || {}); 

我們這樣做,這樣我們可以有多個模塊,這樣的:

// b.js 
var Main = (function (localMain) { 
    localMain.extensionB = function() {}; 
    return localMain; 
})(Main || {}); 

他們都將要麼建立或擴展Main對象,這樣它不無論他們加載的順序如何 - a.js, b.jsb.js, a.js都可以使用。該模式有時也簡化爲

(function (localMain) { 
    localMain.extension = function() {}; 
})(Main = Main || {}); 

(儘管缺少var聲明)。

如果你的模塊(尤其是你的newModule)在主模塊上確實有依賴關係,並且需要在模塊執行前加載它,那麼你就不會使用這個默認模式。