私はjavascriptとモジュールパターンを学んでいますが、コードを間違えたため、このパターンについては正しいとはいえ、いくつかの概念が間違っていることがわかりました。私の基本的なコードは次のようなものです。
(function(window,$){
//global menu object
var menu = (function(){
//menu tab component
var tab = (function(){
//public properties
var tab = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Tab")
}
//return public properties
return tab;
})();
//menu curtain component
var curtain = (function(){
//public properties
var curtain = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Curtain")
}
//return public properties
return curtain;
})();
//menu content component
var content = (function(){
//public properties
var content = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Content")
}
//return public properties
return content;
})();
//public properties
var menu = {
init:initialiseMenu
}
//private properties
function initialiseMenu(){
//initialise each component of the menu system
tab.init();
curtain.init();
content.init();
}
//final menu object
return menu;
})();
window.menu = menu;
})(window,jQuery);
次に、ページが読み込まれ、コードが呼び出されたとき:
menu.init();
アラートを順番に表示します。
initialising tab
initialising curtain
initialising content
さすがに。しかし、コンテンツコンポーネントを次のように変更すると、次のようになります。
//menu content component
var content = (function(){
//public properties
var content = {
init:doStuff
}
//private properties
function doStuff(){
alert("initialising Content")
}
//CHECK ACCESS TO PREVIOUS VARIABLES
curtain.init();
//return public properties
return content;
})();
アラートを順番に出します。
initialising curtain
initialising tab
initialising curtain
initialising content
したがって、引数としてモジュールに渡されなくても、カーテン変数にアクセスできることがわかります。各モジュールは自己完結型だと思いましたが、そうではないことを発見しました。とにかく、モジュールが必要な変数にのみアクセスできるようにすることはできますか?特に私の例には役立つでしょう、ありがとうダン。