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

2008/03/19 20:24

プロトタイプチェーンって何? という質問に答えられますか? 今回はJavaScriptを理解するうえで重要なプロトタイプチェーンという概念についてお話しします。

プロトタイプチェインの終端

 では、無限に続くとも思えるプロトタイプチェインですが、その終了条件はなんなのでしょうか。

 先に答えを言ってしまうと、「Object.prototypeまで検索すると連鎖終了」ということになります。

 コードを使って説明しましょう。以下のようなクラスPersonがあったとします。

function Person() {
}

 そして、Personのインスタンスを作成し、メソッド「hello()」を呼び出してみましょう。

var p = new Person();
p.hello();

 するとJavaScriptランタイムは、以下のようにメソッドを検索します。

  1. p.hello
  2. Person.prototype.hello
  3. Object.prototype.hello (Person.prototypeオブジェクトはObjectクラスのオブジェクトであるため)
  4. 検索終了

 この例では、Object.prototypeまで辿ってもhello()が見つからないため、未定義のメソッド呼び出しということでエラーになります。

 では、ちょっとしたエクササイズをしてみましょう。以下のコードは、正常に動作するでしょうか?(答えは次ページ)

// Object.prototypeにhelloを追加
Object.prototype.hello = function() {
  alert("Hello");
}

// Personコンストラクタ
function Person() {
}
// Personクラスのインスタンスを作ってメソッド呼び出し
var p = new Person();
p.hello();
記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ