PR

継承機構を支えるプロトタイプチェーン

 プロトタイプチェーンは、クラスベースのオブジェクト指向の継承に似た挙動を実現する仕組みです。リスト26は、Bookクラスを継承して、Magazineクラスを定義する例です。

リスト26●プロトタイプチェーンを利用し、Bookクラスを継承したMagazineクラスを定義する例
リスト26●プロトタイプチェーンを利用し、Bookクラスを継承したMagazineクラスを定義する例

 このコードのポイントは(1)の部分です。派生クラスであるMagazineのプロトタイプとして、Bookクラスのインスタンスをセットしています。これにより、Magazineクラスのインスタンスから継承元であるBookクラスのプロトタイプまで参照の連なりができます。その結果、MagazineインスタンスからBookクラスのメソッドを呼び出せるようになります(2)。継承先のMagazineクラスでは、プロトタイプに対して独自のメソッドを追加することもできます(3)

 このように「リンク付けられた一連のプロパティ」がプロトタイプチェーンです(図4)。MagazineインスタンスでtoStringメソッドを呼び出した場合、「Magazineインスタンス」→「Magazineプロトタイプ」→「Bookインスタンス」→「Bookプロトタイプ」という順番にメソッドが検索されます。すべてのオブジェクトはObjectクラスを継承しているため、検索の終点はObject.prototypeになります。

図4●メソッドはプロトタイプチェーンをたどって検索される
図4●メソッドはプロトタイプチェーンをたどって検索される
[画像のクリックで拡大表示]