JavaScriptのプロトタイプチェインをちゃんと理解する

2008-03-19 20:24:01
  • このエントリーをはてなブックマークに追加
最新特集【一覧】

前回までのおさらいと今回のあらすじ

 前回まで、JavaScriptでオブジェクト指向を行う方法についてお話ししてきました。コンストラクタやthisオブジェクトなど、様々なことについてお話ししてきましたが、その中でも重要なのはプロトタイプという概念です。

 プロトタイプについては前々回お話ししました。その内容を簡潔に表すと、「オブジェクトのメンバは、『オブジェクト自身→プロトタイプ』と言う順序で検索される」ということでした。

 しかし、この話にはまだ先があります。それが「プロトタイプチェイン」と言う概念です。

 「プロトタイプチェイン」は、JavaScriptプログラムの動作を理解する上ではある意味中核ともいえる概念で、またとても面白いところでもあります。

プロトタイプチェインとは?

 いきなりですが、プロトタイプってそもそも何なのでしょう?

 前々回もお伝えしたとおり、「オブジェクト自身→プロトタイプ」の順序でメンバが検索されるとのことですが、改めてこの問いについて考えてみたいと思います。

 とりあえず、プロトタイプをalertで表示させてみるとしましょう。

// Personのコンストラクタ
function Person() {
}
alert(Person.prototype);

 すると結果は以下のようになります。

プロトタイプをalert表示 プロトタイプをalert表示

 なるほど、プロトタイプはオブジェクトのようです。

 ここで、ひとつ「アレ?」と思いませんか?

 「オブジェクトのメンバは、『オブジェクト自身にそのメンバがあるか→プロトタイプにそのメンバがあるか』の順序で検索される」んでしたよね。そして、プロトタイプはオブジェクトです。と言うことは・・・

オブジェクト → プロトタイプ=オブジェクト → プロトタイプ=オブジェクト・・・

「オブジェクト→プロトタイプ」と言うメンバ検索の連鎖が、無限に終わらないように思えませんか?(もちろん実際には、無限に続くわけはありません。連鎖の終了条件については次のページで解説します)

 とりあえず、「プロトタイプチェイン」という言葉の意味はこれで説明できます。

 「チェイン」と言う言葉を辞書で調べてみると、「鎖、連鎖」と言う意味です。先ほど示した連鎖のことを表している言葉なのです。

  • 新着記事
  • 特集
  • ブログ