JavaScriptを学び始めると、必ずと言っていいほど「プロトタイプ(Prototype)」という言葉にぶつかります。難解な概念に思えますが、実は日常生活に例えると非常にシンプルです。
プロトタイプとは「原本」のこと
プロトタイプは、簡単に言えば「共有のひな形」です。例えば、あなたが料理教室の先生だとしましょう。生徒全員に「カレーの作り方」を教えるとき、いちいち全員の目の前で最初から最後まで実演しますか?いいえ、一度「基本のレシピ」を紙に書いて渡せば、全員がそれを見て調理できますよね。
JavaScriptにおいて、この「基本のレシピ」がプロトタイプです。オブジェクト(データ)は、必要に応じてこのレシピを参照し、そこに書かれた手順や機能(メソッド)を自分のものとして使います。
なぜコピーではなく「参照」なのか
もし全員にいちいち調理の手順を丸暗記させたら、脳の容量(メモリ)がすぐにいっぱいになってしまいます。プロトタイプも同じです。全てのデータが個別に機能を持つのではなく、「困ったら原本を見に行く」という仕組みにすることで、プログラムは驚くほど軽量に動作します。
クラスは「便利な清書」
最近のJavaScriptでは「クラス(class)」という書き方が主流です。しかし、実はこのクラス、裏側では先ほどのプロトタイプが動いています。
クラスは、初心者でも直感的に書けるようにするための「見やすい清書」のようなものです。昔ながらの「プロトタイプ・ベース」の書き方は少し複雑ですが、クラス構文を使うことで、誰でも迷わずに設計図を書けるようになりました。
実務での捉え方
現場で「プロトタイプを理解しているか?」と聞かれたら、「データが共通の機能を参照する仕組みのことですね」と答えられれば十分です。
・データが個別にメソッドを持つのではなく、親(プロトタイプ)が持っている。
・クラスは、その仕組みを分かりやすく書くためのツールである。
この2点さえ押さえておけば、JavaScriptのオブジェクト指向の基本はマスターしたも同然です。まずは「共有のレシピ本がある」というイメージを持って、コードを書いてみてください。