JavaScriptでのクラス継承とプロトタイプ継承の違い – JavaScriptで始めるプログラミング
JavaScriptでのクラス継承とプロトタイプ継承について理解することは、プログラミングを学ぶ上で非常に重要です。これらの違いを明確にすることで、より適切なコードを書けるようになるでしょう。
クラス継承について
クラス継承は、ES6以降に導入された機能で、従来のプロトタイプ継承に代わるものとして広く利用されています。以下に、クラス継承の基本的な使い方を示します。
class ParentClass {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
class ChildClass extends ParentClass {
constructor(name, age) {
super(name);
this.age = age;
}
displayAge() {
console.log(`I am ${this.age} years old.`);
}
}
const child = new ChildClass('Taro', 10);
child.greet(); // Hello, my name is Taro.
child.displayAge(); // I am 10 years old.
この例では、ChildClass
がParentClass
を継承しており、super()
を使用して親クラスのコンストラクターを呼び出しています。
プロトタイプ継承について
プロトタイプ継承はJavaScriptの伝統的な継承方法です。オブジェクトはプロトタイプチェーンを通じて他のオブジェクトからプロパティやメソッドを継承します。以下に、プロトタイプ継承の基本的な使い方を示します。
function ParentClass(name) {
this.name = name;
}
ParentClass.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}.`);
};
function ChildClass(name, age) {
ParentClass.call(this, name);
this.age = age;
}
ChildClass.prototype = Object.create(ParentClass.prototype);
ChildClass.prototype.constructor = ChildClass;
ChildClass.prototype.displayAge = function() {
console.log(`I am ${this.age} years old.`);
};
const child = new ChildClass('Taro', 10);
child.greet(); // Hello, my name is Taro.
child.displayAge(); // I am 10 years old.
この例では、ChildClass
がParentClass
のプロトタイプを基に作られています。ParentClass.call(this, name);
を使用して親クラスのコンストラクターを呼び出しています。
クラス継承とプロトタイプ継承の違い
- 構文の違い: クラス継承はES6の
class
キーワードを使用しますが、プロトタイプ継承は関数コンストラクターとprototype
プロパティを使用します。 - 可読性: クラス継承はモダンな構文であり、より読みやすいコードを書くことができます。プロトタイプ継承はより冗長になります。
- 機能: クラス継承では
super()
を使って親クラスのコンストラクターやメソッドを呼び出すことができます。しかし、プロトタイプ継承では呼び出し
方法が異なります。
まとめ
クラス継承とプロトタイプ継承のどちらを使うかは、プロジェクトのニーズに依存します。クラス継承はモダンな構文であり、多くの開発者にとって理解しやすいですが、プロトタイプ継承は柔軟性があります。
JavaScriptでのプログラミングを始める際には、これら二つの継承方法を理解することが不可欠です。MDN Web Docs(外部リンク)などのリソースを利用してさらに学びましょう。