Foo.prototypeconstructorとして定義されているプロパティがあり、コンソールにそのように表示されるFoo.prototype.constructor = Foo;
のはそのためです
それは財産をFoo.prototype持つことの結果です。constructorコンストラクター関数の各プロトタイプには、constructorその関数を指すプロパティがあります。
Foo.prototype.constructor = Foo;
さて、オブジェクトがどのコンストラクタ関数のインスタンスであるかを判断するために、Chrome のコンソールはオブジェクトのconstructorプロパティを見て、そのオブジェクトがその関数のインスタンスであると想定します。これはほとんどすべての場合に機能しますが、明示的にプロパティ
が設定されているため、プロトタイプ オブジェクトには機能しません。constructor
例:
> function Foo() {}
undefined
> Foo.prototype.constructor = function xyz() {}
function xyz() {}
> Foo.prototype
xyz {}
別のより簡単な例:
> var obj = {};
> obj
Object {}
> obj.constructor = function xyz() {};
function xyz() {}
> obj
xyz {}
ご覧のとおり、コンソールは実際にconstructorはオブジェクト (通常は継承されます) のプロパティを調べて、それに割り当てられた関数の関数名を出力します。
Foo.prototype.constructor関数の作成時に割り当てられる通常のプロパティです。その目的は、 (で作成された) の実際のインスタンスがFoo を指すコンストラクター プロパティを持つことです。インスタンスはプロトタイプからすべてのプロパティを継承するため。Foonew Foo