プロトタイプベース【prototype-based】
概要

一般的なクラスベースの方式では、設計図にあたるクラスをあらかじめ定義し、そこから「インスタンス」(instance)を生成する。これに対してプロトタイプベースでは、具体的なデータと機能を持つオブジェクトそのものを原型として扱い、それを複製・継承することで別のオブジェクトを定義していく。
新しいオブジェクトを作る際は、基にしたい既存のオブジェクトを複製し、必要に応じて独自のプロパティやメソッドを追加・上書きして利用する。オブジェクト間の参照関係は「プロトタイプチェーン」(prototype chain)と呼ばれる連鎖構造で管理され、自身に存在しないプロパティやメソッドが参照された場合は、自動的に原型のオブジェクトを遡って探索する。
クラスという静的な定義を持たないため、実行時にオブジェクトの構造を動的に変更したり、プロパティを後から追加したりといった操作が容易である。一方、大規模な開発ではどのオブジェクトにどの機能を追加したのかプログラム把握するのが困難になりやすく、コードの見通しが悪くなる場合もある。
JavaScriptはプロトタイプベースの代表的な言語として知られる。ただし、new構文やprototypeオブジェクトなど、クラスベースと折衷したような仕様も持ち、純粋なプロトタイプベースとはやや異なるとも言われる。ECMAScript 2015以降ではclass構文が導入され、クラスベースに近い記述が可能になったが、内部の継承機構はプロトタイプベースのままである。
プロトタイプベースの考え方は1980年代に開発されたプログラミング言語「Self」で確立され、より直感的で柔軟なオブジェクト生成の手法として提唱された。その後、JavaScriptに採用されたことで注目されたものの、他の言語にはあまり広がっておらず、クラスベースのオブジェクト指向が主流のままとなっている。