我想要將我的代碼分解爲模塊,並且引用我的應用程序的其他模塊時遇到問題。在全局變化時,針對globar var的私有變量不會改變
MYAPP = (function(my_app)
{
var funcs = my_app.funcs;
var module2 =
{
stupid_function = function()
{
var some_var = "auwesome!";
//let's call something from the other module...
funcs.do_whatever();
};
};
my_app.module2 = module2;
return my_app;
})(MYAPP);
問題出現在MYAPP.funcs更改時。例如,當我初始化它並添加新方法...因爲「funcs」是在閉包內部創建的,它有一個MYAPP.funcs的副本,並且沒有我需要的新東西。
這是「funcs」獲取更多方法的方式......當我執行方法MYAPP.funcs.init()時,MYAPP.funcs會自行重寫。
var MYAPP = (function (my_app, $)
{
'use_strict';
my_app.funcs = {};
my_app.funcs.init = function()
{
panel = my_app.dom.panel;
funcs = my_app.funcs;
query_fns = funcs.query;
my_app.funcs =
{
some_method: function() { ... },
do_whatever: function() { ... }
};
};
return my_app;
}(APP, jQuery));
在此先感謝!
如果它是任何人都感興趣...
我使用moduling的方法是「緊增強」 http://webcache.googleusercontent.com/search?hl=es-419&q=cache%3Aadequatelygood.com%2F2010%2F3%2FJavaScript-Module-Pattern-In-Depth&btnG=
如果'MYAPP.funcs'是一個對象,然後在創建它不會有所作爲。你沒有它的「拷貝」,你引用了它,所以每當你添加新的函數時,所有引用都將可見。我沒有在你的代碼中看到你正在更新'funcs',但是我確實看到,在將其分配給'my_app'之前,您正在創建一個隱式全局變量'module2'。不知道你爲什麼要在那裏使用全球。 –
是的,我的不好。我只是修正了隱含的var錯誤。 MYAPP.funcs是一個對象。在我的代碼中,沒有增加MYAPP.funcs的例子。我需要加載DOM才能完全定義模塊,因此我所做的是創建一個MYAPP.funcs.init方法,在我調用它時重寫MYAPP.funcs。我更好地提高了我的例子,一秒... 謝謝 – bgusach
如果您要說*用新對象替換*'MYAPP.funcs',那麼會丟失舊數據。您應該更新*對象而不是替換它。 –