関数の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