Javascript のすべてのオブジェクトにはプロトタイプがあります。試してみましょう:
var Richard = new Object( );
alert(typeof(Richard.prototype));
結果は憂鬱で、ブラウザが未定義でポップアップします...
何が起こっているのでしょうか?
別の例を見てください:
function Richard(){}
alert(typeof(Richard.prototype));
上記の例は、関数オブジェクトのみがプロトタイプを持ち、一般的な Object オブジェクトはプロトタイプを持たないことを示しているようです。プロトタイプはありますか?
別の文を実行するとわかります:
var Richard = new Object();
alert(Richard.__proto__);
理解できましたか?
実際、私たちは皆誤解しています。つまり、JavaScript オブジェクトのプロトタイプ チェーンを形成するプロトタイプは、prototype という名前のプロパティであり、アクセス可能であるということです。実際、JavaScript のプロトタイプとプロトタイプという名前のプロパティは、最初はまったく関係がありません。
一般オブジェクトの場合、__proto__ などの属性を介してオブジェクト オブジェクトから継承されたプロトタイプにのみアクセスできます。
関数オブジェクトの場合、作成された時点で関数のプロトタイプになります。オブジェクトはプロトタイプ属性に割り当てられます。