私はJavaScriptを使ってOOPをより深く学びたいと思っています.JavaScriptでクラスやオブジェクトを作成するさまざまな方法があります。私が正しく理解していれば、2つの最も一般的な方法は以下の通りです。しかし、私はそれらの間で何が違うのか理解していません。メソッドは正確に同じ結果を与えています。それらが同一である場合、なぜ2つの異なる方法があるのですか?JavaScriptオブジェクトの作成方法の違いは何ですか?
V1
function Country(name){
this.name=name;
this.cities=[];
this.continent;
}
Country.prototype={
constructor:Country,
addCity:function(name){
this.cities.push(name)
},
setContinent:function(continent){
this.continent=continent;
}
}
V2
function Country(name){
this.name=name;
this.cities=[];
this.continent;
this.addCity=function(name){
this.cities.push(name);
}
this.setContinent=function(continent){
this.continent=continent;
}
}
あなたの四大答えをありがとうございました。私はその違いを正しく理解しました。おそらくあなたが知っているように、EcmaScript6のようにJavaのようなクラスとオブジェクトを作成することは可能でした。
添加
次に、このシステムは、メソッドのプロトタイプと同じであり、使用するには全く欠点がありません。
class Country
{
constructor(name){
this.name=name;
this.cities=[];
this.continent;
}
addCity(name){
this.cities.push(name);
}
setContinent(continent){
this.continent=continent;
}
}
c1 = new Country()
c2 = new Country()
console.log(c1.addCity == c2.addCity) // gives true
私が試した@ vothaisonの方法と私は、これはプロトタイプの方法と同じであると思い言ったように。
MDNは、最初のアプローチを使用しています。https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/create – ppasler
@charty ES6クラスはV2のように見えますが、内部的にはV1に似ています。 – vothaison
私は答えを更新する必要はないと思う。これは優れた説明です:https://reinteractive.com/posts/235-es6-classes-and-javascript-prototypes;チェックアウトしてください。 – vothaison