私のプロジェクトで Module パターンを使い始めました。私が理解しているように、それは次のようになります。
var obj = (function(foo){
//Some initialization logic up here.
//Private methods
var privateBazz = function(){
return "I'm known only to this closure!";
}();
//Public methods
return {
publicFoo: foo,
publicBar: function(){
return foo + privateBazz;
}
}
})();
これは紙の上ではかなり良さそうに見えましたが、実際にはかなりうまく機能しているようです。上部の初期化ロジックは直感的で、次にプライベート メソッド、次にパブリックです。
ただし、1 つの問題が発生しました。return ステートメントのスコープ外および obj の関数宣言のスコープ内から publicFoo または publicBar を呼び出すにはどうすればよいですか?
私の現在の解決策は、次のようなことです。
var obj = (function(foo){
//Private methods declared early for use.
var privateBazz = function(){
return "I'm known only to this closure!";
}();
var privateBar = function(){
return foo + privateBazz;
};
//Some initialization logic up here.
var dependentOnBar = privateBar();
//Public methods
return {
publicFoo: foo,
publicBar: privateBar
}
})();
これは機能しますが、突然、プライベート変数の宣言がオブジェクトのプライベート プロパティ宣言の上に配置されます。プライベート関数の宣言を最初に呼び出すコードの近くに保持しようとすると、問題が悪化するため、必要なすべてのプライベート関数を最初に宣言し、後でプロパティを初期化しています。繰り返しますが、これは機能しますが、コードをできるだけ実行ポイントに近づけることに慣れています。そのため、先頭でプライベート関数のブロックを宣言することは、私にとって本当に厄介です。他の誰かがこのように感じていますか、それとも私が JavaScript を克服する必要があるだけなのでしょうか? これが起こっているのを見たときに取るべき措置はありますか?