これら2つのJavaScriptモジュールパターンの機能に違いはありますか?
var MODULE = (function() {
var privvy = "I'm private!";
return {
getPublic: function() {
return "I'm public";
},
getPriv: function() {
return privvy;
}
};
}());
と
var MODULE = (function() {
var privvy = "I'm private!";
return new function() {
this.getPublic = function() {
return "I'm public";
};
this.getPriv = function() {
return privvy;
};
};
}());
何が起こっているのかというと、最初に、2つのパブリックメンバーを持つオブジェクトが明示的に宣言されてから返されることだと思います。メンバーの1つには、「private」変数への参照を持つ値としての関数があります(つまり、クロージャはすぐに実行される関数によって形成されますが、getPublic()メソッドは、この関数の実行が終了した後もこの変数にアクセスできます-おもう)
2つ目は、パブリックにアクセス可能な変数に2つの関数を割り当てる匿名コンストラクターを使用してオブジェクトを作成し、IEFが同じ方法でpriv変数へのアクセスを制限するクロージャーを作成します。
これらの2つのバリエーションは、まったく同じオブジェクトになりますか?