プロトタイプチェーン

今回は前回やったプロトタイプの続きで
プロトタイプチェーンという概念についてお話しよう

そんな顔しても止めんぞ


プロトタイプのおさらい

せっかく終わったと思ったのに…拷問か!

繰り返しやるのが大事なんだ

簡単に説明すると
同じ動きのメソッドをコピーすんの無駄だし、どうせなら同じものを共通して使えるようにしようぜ
こんな感じだったが、大丈夫か?

はいはい、大丈夫よー。

で、プロトタイプ…チェーン?チェーンってなんだっけ、鎖?

プロトタイプチェーン

チェーンとはそう、鎖って事だな。
鎖って数珠つなぎになって続いていくだろう。そういう意味なんだ

で、プロトタイプの数珠つなぎ。
さぁ、分かりやすいように教えてくれたまへ

なんだかんだ言っているが実はプロトタイプチェーンは、プロトタイプのお話の中でも出てきているのだ

ん?そうだっけ?

プロトタイプの参照方法、覚えているか?

インスタンス化した後、メソッドを実行させる時に 元オブジェクトに実行メソッドが無い場合は、プロトタイプのを参照するようにするんだよね

そうだ。それが実はもうプロトタイプチェーンなんだよ

じゃぁもうわかったよ。もうこのお話は終わりだね

甘い。まだ終わりじゃないぞ

さて、プロトタイプを参照する。実はここで終わりではないんだ。
ここでもなかったらさらに遡って行くのだ

えー、まだあるの。もういいじゃん

遡って行くといっても、後1回遡るだけだ。
つまりは、こういう動きをする

insObject = new TestObject();
insObject.myMethod(); // インスタンス化してメソッドを実行
↓なかった。
TestObject.prototype.myMethod(); //プロトタイプを見に行く
↓なかった。
Object.prototype.myMethod(); // TestObject.prototypeは、Objectクラスのオブジェクト
↓なかった。
undefined

でたよ!またややこしそうな言葉が!だからアタイは嫌な予感がしてたんだよ!

TestObject.prototypeは、Objectクラスのオブジェクト
どうせここの事だろう。
全てのオブジェクトはObjectクラスのオブジェクトであるのだ。
いわゆるピラミッドの頂点といった事だ。

では、本当にObject.prototype.を参照しているのか?
これを実際に見てみよう

Object.prototype.myMethod = function(){ alert('おぶじぇくとぉ!!!!'); }

var myObj = function()
 {
  this.name;
 }

myObj.prototype.sayName = function ()
 {
  alert(this.name);
 }

var chiruno = new myObj;
var reimu   = new myObj;

chiruno.name = 'さるの';
reimu.name   = 'はくれい れいむ';

chiruno.sayName();
reimu.sayName();

chiruno.myMethod();

おぶじぇくとぉおぉぉぉおおおお!!!

ソースの中を見るとさっきけーねが説明してた通りだね。

もうないよね。これ以上

ああ、これ以上はもうない。Objectクラスの中がなければ、undefined扱いだからな。
プロトタイプチェーンの流れとしては以上!今回ははここまでだ

けーねありがとう!