かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

JavaScript (ES2015) super のメモ

ES2015 で使えるようになった class ですが、JavaScriptではあくまでクラスっぽいモノ(プロトタイプ・オブジェクト)として実装されているらしいので、継承元のプロパティやメソッドを使えるsuperがどうなってるのか気になったので調べてみたメモ。

super

const school = {
  school: 'スターライト学園',
};

const idol_type = {
  __proto__: school,
  type: 'cute',
};

const idol = {
  __proto__: idol_type,
  name: '星宮いちご',
  to_s() {
    return `${this.name} Type: ${super.type} 所属: ${super.school}`;
  }
};

idol.to_s();
// => 星宮いちご Type: cute 所属: スターライト学園
感想

superは該当する値やメソッドをprototypeチェーンを辿って探してくるキーワード。
ES2015から使えるようになったclassもあくまで昔やってたクラスっぽいオブジェクトの延長ナンダナって解って理解が進みました。
当時クラスっぽいものを作るのに使ってた newJavaScript: The Good Partsって本やブログで evil みたいな話みたことあるんだけどアレ class が出来たことによって許されたのかな??? チョット気になる。


[参考]

スーパーマリオ ウェットティッシュ ケース付 (80枚入)

スーパーマリオ ウェットティッシュ ケース付 (80枚入)

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス