November 2020
Intermediate to advanced
740 pages
9h 12m
Japanese
混乱を避けるために本書では一貫してJavaScriptをクラスベースのオブジェクト指向言語として扱ってきました。つまり、オブジェクトの雛形としてのクラスがあり、継承関係はクラスによって規定され、new演算子をクラスに対して使用してインスタンス化することで新しいオブジェクトが生成される、といったようにクラスがすべての根幹となるオブジェクト指向言語であるかのように説明しました。
この付録にまでたどり着いた皆さんはきっと混乱を乗り越えられるものと信じて書きますが、端的に言うとJavaScriptに関する先の説明は嘘です。実はJavaScriptはクラスベースのオブジェクト指向言語を装ったプロトタイプベースのオブジェクト指向言語なのです。
オブジェクト指向はつまるところ関連するデータと振る舞いの集合であるオブジェクト同士の関係としてシステムを捉えようという考え方です。クラスは必須ではありません。現在クラスベースのオブジェクト指向が主流であることは事実ですが、オブジェクト指向にはそれ以外にもいくつか流派があり、プロトタイプベースはそのひとつです。
プロトタイプベースのオブジェクト指向言語では、クラスではなくプロトタイプを使用してメソッドの実装を共有し、継承もプロトタイプチェーンという方式で実現します。「4章 オブジェクトを学ぶ」でオブジェクトリテラルで継承を実現する方法として__proto__というプロパティを使用したことを覚えているでしょうか? 以下に例を再掲します。
>let tusk1 = {cry: "Chumimin",act1() {console.log(this.cry)