最初のバージョンは単純なObjectを返し、2番目のバージョンは単純なObjectを返します。 ew動物。
最初のバージョンは小さなデータオブジェクトに適しています。彼らは異なる値を格納することができ、それはかなりです。彼らは多くの記憶を必要としません。
もう1つは大きなオブジェクト用です。それらにプロトタイプを付けて、 "this"キーワードを使ってオブジェクトのプロパティに到達することができます。すべてのオブジェクトは同じプロパティを持つため、最初の方法よりもかなり大きな領域を占有します。
ここで、ベクトルオブジェクトを作成しましょう。最初の方法では、あなたがこのようなものだろう:
function createVector(x, y) {
return {
x: x,
y: y
};
}
//Add to vectors together
function add(vec1, vec2) {
return {x: vec1.x + vec2.x, y: vec1.y + vec2.y};
}
add(createVector(1, 1), createVector(1, 2)); //return {x: 2, y: 3}
をこれはかなり便利にすることができますが、ベクトルの複数の種類(など、4次元、3次元を...)持っているために何をしたい場合は?あなたは加算器関数のための別個の名前を与える必要がありますが、それはあまり良くありません。第二の方法の出番ですこれは、異なる名前空間に機能を分離することができます。
function Vector2(x, y) {
this.x = x;
this.y = y;
}
//Add vectors together:
Vector2.prototype.add = function(vec) {
this.x += vec.x;
this.y += vec.y;
};
new Vector2(1, 1).add(new Vector2(1, 2)); //{x: x, y: y}
この方法で、あなたは複数のベクトル型を作成することができ、それらのそれぞれが互いに干渉することなく独立した追加機能を持つことができます。
達成したいことに基づいて両方を使用する必要があります。
ハムスターの車輪が揺れ動くことができる、まあまあの出発点です:[Ian Bicking - 「新」はJavascript OOをより難しくする](http://www.ianbicking.org/blog/2013/04/new-considered- harmful.html) –
質問を客観的な相違に限定してください。あなたの質問が現在の状態にあるように見える、主に意見に基づいた質問に対する特定のトピック外の理由があります。 –
最初のものはプレーンなオブジェクトを作成し、2つ目は 'Animal'インスタンスを作成します(' Animal.prototype'から継承します)。 *どちらがお勧めですか?*あなたが誰に依頼するかによって異なります。何人かの人々は、「新」をまったく犠牲にして回避しようとする。 –