実際、プロトタイプはほんの数文で要約できます:
すべてのプロトタイプはオブジェクトであり、オブジェクトのみがプロトタイプを持ちます
関数のみがプロトタイプ属性を持ちます。これは、この関数が生成されたときに生成されるオブジェクトによって継承されるプロトタイプです。コンストラクターとして使用されます。関数のプロトタイプは、そのプロトタイプ属性とは何の関係もありません。
オブジェクトのプロトタイプには、非標準属性 __proto__ または ECMAScript5 メソッド Object.getPrototypeOf() を通じてアクセスできます。
1 は実際には間違っています。プロトタイプ チェーンの最後にあるオブジェクトにはプロトタイプがありません。ただし、より簡単な表現のために。プロトタイプ チェーンを見れば、.toString() などの未定義メソッドがどのように由来するかがわかります。
上記の曖昧さは文字通りの理解に基づいており、文法自体には曖昧さはありません。プロトタイプとは原型という意味ですが、オブジェクトの原型はプロトタイプからアクセスされるわけではありません。
関数にはプロトタイプ属性がありますが、それ自体のプロトタイプとは何の関係もありません。これを理解した上で、プロトタイプチェーンや継承に関する記事を読むとより理解しやすくなります。
理解を深めるための例をいくつか示します: