私たちが作っている全ての関数に対して、パソコンが該当関数の中にprototype属性を入れます。
関数ごとに原型対象は違います。
普通の関数がprototypeを呼び出しても意味ありません。
関数が構造関数としてprototypeを呼び出す時、構造関数(クラス)から生成された全てのインスタンスには一つの隠された属性はクラスのprototype対象を指しています。
その隠された属性については__proto__でアクセスすることができます。
クラスとインスタンスの中に共通の属性があり、その属性は全部同一オブジェクト(0x123)を指しています。
同一オブジェクトは一つのパブリック領域に相当し、全てのクラスおよびクラスから生成されたインスタンスはこのオブジェクトをアクセスすることができます。
そのため、私たちは各オブジェクトの中に共有している内容を全部、共有のオブジェクト内に設置することができます。
構造図はこうなります。
一つのオブジェクトの属性またはメソッドをアクセスする時に、
まずはオブジェクト自身で探します。あれば、直接使用します。
なければprototypeオブジェクトの中で探して呼び出しします。