4

プロトタイプを追加した後、コンストラクターが Foo から Object に変わるのはなぜですか? 元のコンストラクターにアクセスするにはどうすればよいですか?

コード:

function Foo() {}
var foo1 = new Foo();
console.log('foo1: ' + foo1.constructor);

Foo.prototype = {}
var foo2 = new Foo();
console.log('foo2: ' + foo2.constructor);

出力:

foo1: function Foo() {}

foo2: function Object() {
    [native code]
}

http://jsfiddle.net/vDCTJ/

4

2 に答える 2

7

これは、Foo にそのプロトタイプ用の新しいオブジェクトを与え、そのオブジェクトの「コンストラクター」プロパティを設定しなかったために発生します。

Foo.prototype = { constructor: Foo };

インスタンス化された関数オブジェクトは、その方法で既に初期化されている「プロトタイプ」プロパティのオブジェクトを取得します。

于 2013-05-30T01:33:32.390 に答える
1

それはいけません。

foo1は、継承するへの参照を持つ初期Foo.prototypeオブジェクトで作成されました。constructorFoo

対照的に、インスタンス化する前にfoo2設定した空のオブジェクトから継承します。そして、そのオブジェクトは、そのプロパティを からFoo.prototype継承します。constructorObject.prototypefoo2.constructor === Object

于 2013-05-30T01:34:23.820 に答える