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

2008-03-19 20:24:01
  • このエントリーをはてなブックマークに追加

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

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

 先に答えを言ってしまうと、「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();
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]