JavaScriptのプロトタイプチェーン

JavaScriptのプロトタイプチェーンについて調べていたら、頭が爆発しそうになったので、理解できたところをまとめておきます。

1. オブジェクトにプロパティが存在する時は、それを返す。

2. オブジェクトにプロパティが存在しないときは、オブジェクトの__proto__プロパティをたどる。
__proto__プロパティは、オブジェクトのコンストラクタ関数のprototypeにリンクしている。
すなわち、
オブジェクト.__proto__ === オブジェクト.constructor.prototype ⇒ true

3. コンストラクタ関数のprototypeにプロパティが存在するときは、それを返す。

4. コンストラクタ関数のprototypeにプロパティが存在しないときは、prototypeのコンストラクタ関数、すなわちObjectのprototypeを調べる。

5. Object.prototypeにプロパティが存在するときは、それを返す。

6. Object.prototypeにプロパティが存在しないときは、undefinedを返す。