Web上で他の人のソースコードやさまざまな記事を読んでいるうちに、JavaScriptで「オブジェクト指向スタイル」のプログラミングを使用する人は、まったく異なっていることが分かりました。JavaScript - オブジェクトを構成するさまざまな方法
1つのプロパティと1つの機能を持つ小さなモジュールを作成したいとします。
// Option 1
var myObject1 = {
myProp: 1,
myFunc: function() { alert("myProp has value " + this.myProp); }
};
// Option 2
var myObject2 = function() {
return {
myProp: 1,
myFunc: function() { alert("myProp has value " + this.myProp); }
};
}();
// Option 3
var MyObject3 = function() {
this.myProp = 1;
this.myFunc = function() { alert("myProp has value " + this.myProp); }
};
var myObject3 = new MyObject3();
// Option 4
var MyObject4 = function() { };
MyObject4.prototype.myProp = 1;
MyObject4.prototype.myFunc = function() { alert("myProp has value " + this.myProp); };
var myObject4 = new MyObject4();
すべてのこれらのアプローチは構文的に異なっているが、同じように使用できるオブジェクトを生成するように見える:私は、このタスクに少なくとも4つのアプローチを見てきました。
これらの意味の違いは何ですか?何らかの理由で、これらのオプションの1つを残りのものよりも選択する必要がある場合がありますか?
return文の前にコードを追加しないと、オプション2は無意味です。返されたオブジェクトのメソッドからアクセス可能な変数を追加することもできます。そうでない場合は、冗長IIFEにラップされます。オプション1と2はシングルトンを作成し、オプション3と4は複数のインスタンスを作成するために使用できるコンストラクタを提供します。そして、あなたは3と4のようになりますが、インスタンスごとにmyPropが設定され、プロトタイプにmyFunc()が設定されたオプション5が欠けています。 – nnnnnn
可能な重複:[JavaScriptでカスタムオブジェクトを正しく作成する方法](http://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript) – Roberto