クラスとインスタンス
インスタンスは主にnew クラス名()
で生成する。
const インスタンス名 = new クラス名();
プロパティとメソッド
クラスを定義するとき
class Car {
constructor (color) {
// プロパティの定義
this.color = color;
}
// メソッドの定義
run () {
console.log(`${this.color}色の車が走る`);
}
}
複数のインスタンスを生成する。
const blueCar = new Car('青');
const orangeCar = new Car('オレンジ');
const greenCar = new Car('緑');
メソッドはインスタンス.メソッド()
で呼び出す。
blueCar.run(); // blueCarだけ走る
継承
継承のイメージ
子クラスAはmethodAだけでなく、親クラスのpropartyとmethodも使うことができる。
子クラスCのようにpropartyとmethodをオーバーライドして機能変更して使うこともできる。
継承のメリット
- コードの重複減らしてコードの再利用性を高めることができる。
- メソッドの追加やオーバーライドで機能拡張できる。
継承の問題点
多重継承問題
①クラスの管理が煩雑になってしまう
②密結合になってしまう。上図だと親クラスを変更すると5つのクラスに影響を及ぼす。
菱形継承問題
孫クラスBのメソッドは子クラスA,子クラスBどちらを継承しているか不透明
💡継承はオブジェクト指向の特徴だが、強みというわけでもない。
継承よりクラス設計の構成を考える。
身近にあるオブジェクト指向
配列
let ary = [1, 2, 3];
ary.length; // 長さプロパティを参照
ary.push(4); // 要素を追加するメソッドを呼び出す
配列リテラルを使わない場合
let ary = new Array(1, 2, 3);
ary.length;
ary.push(4);
Arrayクラスからインスタンスを生成