今回は前回やったプロトタイプの続きで
プロトタイプチェーンという概念についてお話しよう
そんな顔しても止めんぞ
せっかく終わったと思ったのに…拷問か!
繰り返しやるのが大事なんだ
簡単に説明すると
同じ動きのメソッドをコピーすんの無駄だし、どうせなら同じものを共通して使えるようにしようぜ
こんな感じだったが、大丈夫か?
はいはい、大丈夫よー。
で、プロトタイプ…チェーン?チェーンってなんだっけ、鎖?
チェーンとはそう、鎖って事だな。
鎖って数珠つなぎになって続いていくだろう。そういう意味なんだ
で、プロトタイプの数珠つなぎ。
さぁ、分かりやすいように教えてくれたまへ
なんだかんだ言っているが実はプロトタイプチェーンは、プロトタイプのお話の中でも出てきているのだ
ん?そうだっけ?
プロトタイプの参照方法、覚えているか?
インスタンス化した後、メソッドを実行させる時に 元オブジェクトに実行メソッドが無い場合は、プロトタイプのを参照するようにするんだよね
そうだ。それが実はもうプロトタイプチェーンなんだよ
じゃぁもうわかったよ。もうこのお話は終わりだね
甘い。まだ終わりじゃないぞ
さて、プロトタイプを参照する。実はここで終わりではないんだ。
ここでもなかったらさらに遡って行くのだ
えー、まだあるの。もういいじゃん
遡って行くといっても、後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扱いだからな。
プロトタイプチェーンの流れとしては以上!今回ははここまでだ
けーねありがとう!