クラスを定義する

class MyClass {
    constructor(x = 0, y = 0) {
        this.x = x;
        this.y = y;
        this.myField = "orange"
    }

    myMethod() {
        console.log(this.myField);
    }

    static myStaticMethod() {
        console.log("staticメソッド");
    }
}

class MyChildClass extends MyClass {
    constructor(x, y) {
        super(x, y);
    }

    myMethod() {
        super.myMethod();
        console.log(`子クラスのメソッド ${this.myField}`);
    }
}

const myInstance = new MyChildClass();

console.log(myInstance);
console.log(myInstance.myField);
myInstance.myMethod();
MyClass.myStaticMethod();


コンストラクタ

初期値を定義する
thisはクラス自身のこと
constractor内ではletやconstの記述がない
super() を書くと、親クラスのコンストラクタが呼ばれる

// 条件演算子(3項演算子)を使った初期値の設定
constructor(x, y) {
    this.x = (typeof x === "number") ? x : 0;
    this.y = (typeof y === "number") ? y : 0;
}


静的メソッド

static myStaticMethod() {
    console.log("staticメソッド");
}

インスタンスを作らずに実行されるメソッド
静的メソッド内では this を使うことが出来ない
クラス内で使われる this は、このクラスから作られるインスタンスのことなので、インスタンスを作らずに実行される静的メソッド内では this をつかうことが出来ない


静的メソッドの呼び出し

クラス名.静的メソッド名 で実行される

MyClass.myStaticMethod();


メソッド

メソッド内に super().メソッド名 を書くと、親クラスのメソッドが実行される

myMethod() {    //  子クラスのメソッド
    super.myMethod();    //  親クラスのメソッド読み出し
    console.log(`子クラスのメソッド ${this.myField}`);
}