0

クロムオブジェクトの表示を正しく読み取れない場合があります。

私はこのコードを持っています:

function Foo(){};
var g= new Foo();

また - (コンソールコード):

>>Foo.prototype //  Foo {}

質問 :

その型はのインスタンスだと言いますFooか?または単なるplain通常のオブジェクトですか?

ps - プロトタイプは通常のオブジェクトだと聞きました。Fooの単語Foo{} は、それがのインスタンスであると私に思わせますFoo

なぜ私は尋ねているのですか?

これを実行しているため:

Foo.prototype.__proto__

Object {}次のインスタンス コンストラクター プロトタイプではなく、次のように表示されます: Foo.prototype...

追加情報 :

私の関連する質問(クロムがオブジェクトを表示する方法については触れていません

4

1 に答える 1

3

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

于 2013-11-02T18:22:53.353 に答える