プロトタイプチェーンとは
プロトタイプの多重形成をプロトタイプチェーンという。
Case1
//Personというコンストラクタ関数を用意
function Person(name, age) {
this.name = name;
this.age = age;
}
}
//prototypeを使用して、Person, Objectにそれぞれhelloメソッドを作成している。
Person.prototype.hello = function() {
console.log('Person: hello ' + this.name);
}
Object.prototype.hello = function(){
console.log('Object: hello' + this.name);
}
// Personコンストラクタをnewしてbob変数に代入
const bob = new Person('Bob', 18);
// bob.hello()を実行している。
bob.hello();
>> Person: hello Bob
// ここで出力されるのは当然Person.prototype.helloになる。
case2
case1と基本は同じだが、Person.prototypeをコメントアウトするとbob.hello()は実行されるのか?
function Person(name, age) {
this.name = name;
this.age = age;
}
Object.prototype.hello = function(){
console.log('Object: hello' + this.name);
}
// Person.prototype.hello = function() {
// console.log('Person: hello ' + this.name);
// }
const bob = new Person('Bob', 18);
bob.hello();
//Object.prototypeが実行された。
>>> Object: hello
ここまでのまとめ
prototypeは階層構造となっている。
最初はnew されたPersonコンストラクタを探すが、ない場合は抽象度が高いObjectのhelloを探しにいく挙動となっている。
このようにネストされているprototypeをプロトタイプチェーンと呼ぶ