関数のprototypeプロパティは、演算子で作成されたときにその関数のすべてのインスタンスが継承するオブジェクトを保持しますnew。そして、これらすべてのプロトタイプ オブジェクト (通常)にはconstructor、関数を指すプロパティがあります。循環参照があります。そのため、 はnew test()そのプロパティを継承するため、 に(new test).constructor === test評価されtrueます。
prototype関数オブジェクトのプロパティと、オブジェクトが継承するプロトタイプ オブジェクト (「内部[[prototype]]プロパティ」として参照されることが多い)を区別する必要があります。
コンストラクターは、言うまでもなく関数であり、Function両方を備えています。したがって、Function.prototypeオブジェクトから継承します。constructorプロパティは、すべての関数がコンストラクターによって構築されることを示していますFunction。開発者コンソールにオブジェクトのプロトタイプが表示される場合は、Functionそれらを見ることができます。設定にオプションがあると思います。
したがって、有名な「プロトタイプ チェーン」は、constructorおよび/またはprototypeプロパティに関するものではなく、そのオブジェクトが継承するプロトタイプ オブジェクトに関するものです。
function test() {} new test()
(a Function) (a test instance)
|| ||
|| ||
\/ \/
Function.prototype test.prototype
(a Function, by spec) (an Object)
|| ||
|| ||
\/ \/
Object.prototype Object.prototype
|| ||
|| ||
\/ \/
null null