質問: ・constructorプロパティは、コンストラクタ関数にも、コンストラクタ関数.prototypeにも、存在するのでしょうか? ・それとも、プロトタイプチューンを辿って単にそう見えるだけ? 下記は何が違うのでしょうか? ・「Hoge.constructor」「Hoge.prototype.constructor」に何らかのオブジェクトは存在する? ・それぞれの役割は? ・どういうタイミングで作成される? --- function Hoge() {}; 1 console.log(Hoge); 2 console.log(Hoge.prototype.constructor); 3 console.log(Hoge.constructor.prototype); 4 console.log(Hoge.prototype.constructor.prototype); --- 3 ・Hoge.constructor.prototypeに実体はあるでしょうか? ・それとも、プロトタイプチューンを辿って取得した結果を表示しているだけ? 4 ・ここに継承したオブジェクトが保存される? --- 理解できないので質問追記します。 ・下記ページに以下の記載があるのですが、この仕様はどこで確認できるでしょうか? > > 継承されたオブジェクトはconstructor.prototypeに格納される > > > > >
回答: 関数が定義されると、関数オブジェクトのprototypeプロパティに、constructorプロパティが自分自身のオブジェクトが設定されます。 つまりHoge.prototype.constructor→Hogeです。それ以外は特別なことはなく、 Hoge.constructorはプロトタイプチェーンをさかのぼって Hoge.__proto__.constructor→Function.prototype.constructor→Functionです。