私のプログラムの残りの部分から変数などを隠すために、明らかにしているモジュールパターンに "オブジェクトファクトリ"をカプセル化したいと思います。私のモジュールで作成されたオブジェクトは同じprototype
インスタンスを共有しますか?つまり、工場で新しいオブジェクトを作成するたびに新しいprototype
オブジェクトをメモリに作成していますか、またはすべてのオブジェクトが同じプロトタイプを共有/参照していますか?"オブジェクトファクトリ"をモジュールパターンでカプセル化すると、オブジェクトプロトタイプのメモリ消費量が増えますか?
var Factory = (function(){
var uid_seed = 0;
function TestObject() {
this.size = 1;
this.name = "foo";
this.uid = uid_seed++;
}
TestObject.prototype.getName = function() {
return "Name is: " + this.name;
};
return {
testObject: function() {return new TestObject();}
}
})();
var arr = [];
for (var i = 1000; i--;) arr.push(Factory.testObject());
私はこのコードの最後の行の1000個のTestObject
オブジェクトを作成し、それらは各々がメモリを消費しているのプロトタイプを持っている:ここでは
あなたは非常に明確に私に答え - 私が「テスト」へのあなたの方法は私のプロトタイプを変更する必要がないという事実が好きです。私はuid_seedの再評価についてのあなたのコメントを理解していません。チェックして、私が作成したそれぞれの 'TestObject'は、目的の' uid'を持っています。実際のコードでは、 'uid'を難読化して使用しています。ここにそれを含めるのは礼儀正しいものでした。しかし、私は何かを欠いていますか(あなたの意見など)?ありがとう! – Joshua
@ジョシュア:はい、それぞれのオブジェクトには希望のuidがあります。 'TestObject'コンストラクタ(とそのプロトタイプ)と' uid_seed'変数は同じスコープにあります。どういうわけか、各オブジェクトが何度も再作成され、異なるプロトタイプを持つ別のクラスであったとすれば、 'uid_seed'初期化もそれぞれのオブジェクトに対して再実行され、各オブジェクトには'.uid' 0です。しかし、そうではありません。これは、コードがうまくいくかどうかをさらに証明するものです。 – Bergi
素晴らしい!ありがとうございました。ケースが閉まった。 – Joshua