付録AJavaScriptのオブジェクト指向

混乱を避けるために本書では一貫してJavaScriptをクラスベースのオブジェクト指向言語として扱ってきました。つまり、オブジェクトの雛形としてのクラスがあり、継承関係はクラスによって規定され、new演算子をクラスに対して使用してインスタンス化することで新しいオブジェクトが生成される、といったようにクラスがすべての根幹となるオブジェクト指向言語であるかのように説明しました。

この付録にまでたどり着いた皆さんはきっと混乱を乗り越えられるものと信じて書きますが、端的に言うとJavaScriptに関する先の説明は嘘です。実はJavaScriptはクラスベースのオブジェクト指向言語を装ったプロトタイプベースのオブジェクト指向言語なのです。

オブジェクト指向はつまるところ関連するデータと振る舞いの集合であるオブジェクト同士の関係としてシステムを捉えようという考え方です。クラスは必須ではありません。現在クラスベースのオブジェクト指向が主流であることは事実ですが、オブジェクト指向にはそれ以外にもいくつか流派があり、プロトタイプベースはそのひとつです。

A.1 プロトタイプチェーン

プロトタイプベースのオブジェクト指向言語では、クラスではなくプロトタイプを使用してメソッドの実装を共有し、継承もプロトタイプチェーンという方式で実現します。「4章 オブジェクトを学ぶ」でオブジェクトリテラルで継承を実現する方法として__proto__というプロパティを使用したことを覚えているでしょうか? 以下に例を再掲します。

> let tusk1 = { 
    cry: "Chumimin", 

    act1() { 
      console.log(this.cry) 

Get ハンズオンJavaScript now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.