的代碼塊,如果模塊已被定義只用來和你想擴展它(例如,添加一個新方法):
var module = (function (module) {
module.prototype.something_else = function() {
};
return module;
})(module);
它接受module
作爲輸入參數,並返回延伸module
。然後var module =
的分配取代原來的module
。
回答您的問題一個接一個:
爲什麼VAR模塊=當前部分呢?
在上面的示例中(取自您的第一個URL),var module =
是沒有必要的。他們提供的簡單例子很愚蠢。你可以完成與此完全一樣的事情:
module.prototype.something_else = function() {};
使用上面的圖案來擴展類,使在你的第二個網址提供的例子更有意義(http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html):
var MODULE = (function (my) {
var old_moduleMethod = my.moduleMethod;
my.moduleMethod = function() {
// method override, has access to old through old_moduleMethod...
};
return my;
}(MODULE));
立即執行的函數創建一個新的範圍,我們可以保留舊方法var old_moduleMethod = my.moduleMethod;
下一個問題:
爲什麼返回模塊;如果以前的部分不需要?
你需要return module
,否則該函數不會返回任何與var module =
分配將被設置爲未定義的值。
下一個問題:
的情況下,當模塊是不是已經有時被定義...是,上述情況?
是的,就是這樣。如果module
未定義,那麼您需要傳入一個空對象。但是,如果首先未定義對象,通常會使用模式來擴展對象。這是沒有意義的,只會使你的代碼複雜化。
如果你想擴展一個模塊? – Holybreath 2014-09-03 20:13:56
是的,這件作品是爲了這些目的,但有些部分似乎對我來說是多餘的。 – gavenkoa 2014-09-03 20:15:51
呃......需要'return module',否則你不會暴露這個模塊......還記得,那個javascript是函數作用域的。 – Holybreath 2014-09-03 20:18:20