0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【javascript】プロトタイプチェーン

Posted at

プロトタイプチェーンとは

プロトタイプの多重形成をプロトタイプチェーンという。

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をプロトタイプチェーンと呼ぶ

スクリーンショット 2021-11-18 16.08.46.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?