質問: オブジェクトが生成されると同時にObject.prototypeを継承したプロトタイプオブジェクトが作られます。 その生成されたオブジェクトを実体化すると実体化したインスタンスは、プロトタイプオブジェクトの参照を持つことが出来ます。 オブジェクトとこのプロトタイプオブジェクトの関係は、**片方が生成されるともう一方も生成される**だけなのでしょうか。 オブジェクトとプロトタイプオブジェクトには、どのような関係があるのでしょうか。
回答: > > オブジェクトが生成されると同時にObject.prototypeを継承したプロトタイプオブジェクトが作られます。 > > > いえ、オブジェクトの生成前からプロトタイプオブジェクトは存在して、オブジェクトの生成の際には**結び付けられる**だけです。 具体的には、コンストラクタとなる関数の`.prototype`に入るオブジェクトが、それぞれのインスタンスのプロトタイプ(多くの処理系では`__proto__`としてアクセス可能)になりますが、途中でオブジェクトごと入れ替えるような荒業を取らないかぎり、**すべて同じオブジェクトです**。リテラルで作ったオブジェクトや配列も、`Object.prototype`や`Array.prototype`をプロトタイプとして使います。 そのため、あとから`Object.prototype`へメソッドを追加すれば、継承する全オブジェクトにメソッドを追加できます(もっとも、このような手法は「プロトタイプ汚染」と呼ばれ、現代では禁じ手に近い扱いとなっています)。