速習ECMAScript2018を勉強する クラス定義編

class

  • es2015から、クラス定義が可能になりましたが、JSのクラス定義は、他のスクリプト言語とちょっと違います。 初心者の域をでないので詳しくはわかりませんが、プロトタイプのかぶりものらしいです。
  • プライベートモードがなかったり、変数宣言もできません。
  • 変数は、コンストラクター内に記載します。
  • 暗黙的に、アンダーバー指定は、外部からの取得、設定は禁止です。
  • アンダーバー変数等は、getter / setter を使ってアクセスします。
  • クラス内の関数を見ないと、外からのアクセス方法は、変わらないのでgetter / setter を使っているかは判断できません。
  • クラスで定義されていない値をセットできるのは、JSのクラスの特徴でもあります。(プロトタイプの特徴かもしれませんが)
  • とりあえず、分かる範囲のサンプルです。
class Member {
    constructor({name, height}) {
        Object.assign(this,{ name, height })
        this._age = 0;
    }
    // let age = 0;  // JSでは、不可
    get age() {
        return this._age;
    }
    set age(value) {
        this._age = value
    }
    getInfo() {
        return `${this.name} ${this.height} ${this._age} `
    }
}

const man = {
    name: '切磋',
    height: 180,
}

const m = new Member({...man});
m.age = 26 // setter
m.weight = 56 // クラス定義はしていない
console.log('Weight: ', m.weight)
console.log('Age: ', m.age) // getter
console.log(m.getInfo())
  • 慣れていないからか、少し書くにくい感じがします、他のスクリプトもまた、見返してみようかと思っています。
  • 書いていませんが、extend や staticメソッドも可能です。