質問: 今まで、オブジェクトが生成されると同時にObject.prototypeを継承したプロトタイプオブジェクト(オブジェクト.prototype)が作られると思っておったのですが、 過去の質問に置いてそのまちがいを指摘され、**オブジェクトと同時にプロトタイプオブジェクトが生成されるどころかオブジェクト生成前にプロタイプオブジェクトは、存在しているそうです。 そしてオブジェクト生成後に結び付けられるそうです。** ここで質問ですが、オブジェクト生成前から存在していたプロトタイプオブジェクトとオブジェクトは、どのようにして結び付けられるのでしょうか。 また、プロトタイプオブジェクトは、いつ生成されたのでしょうか。
回答: プロトタイプオブジェクトはコンストラクタ関数が定義されると同時に生成されるはずです。 なぜなら、それ(定義)以前には取得が不可能でそれ以後に取得が可能になるからです。 すべてのオブジェクトは`__proto__`というプロトタイプオブジェクトへの参照を持っています。 ``` { let Foo = function (){} // Foo.prototypeが生成される let foo = new Foo // __proto__がFoo.prototypeであるfooが生成される console.log(foo.__proto__ === Foo.prototype) // => true } ```