2016-09-14 12 views
0

は、与えられた例を参照してください。プロトタイププロパティのコンストラクタインスタンスの奇妙な挙動

コード:そのプロトタイプは、それが与えることの理解にオブジェクトから派生されるよう

var Person = function (name) { 
    this.name = name; 
} 
var john = new Person("John"); 
console.log(Person.prototype);//Object{} 
console.log(john.prototype); //undefined 

人関数でありますその代りにオブジェクト(コンストラクタ& proto)がそのプロパティとして返されます。

第2コンソールステートメントに来る。したがって、johnはPersonのインスタンスなので、Personと同じプロトタイプを持つ必要があります。つまり、にはオブジェクトがあるはずです。 はどうやって定義されていません?誰か説明できますか?

答えて

1

クラスにプロトタイプがあり、クラスのインスタンスにプロトタイプがありません。

クラスは新しいインスタンスを作成する必要があるため、プロトタイプがあります。 johnは新しいインスタンスをインスタンス化する必要がないため、プロトタイプを持つ理由はありません。

あなたが本当に必見は、クラスのインスタンスでプロトタイプを持っている場合は、あなたがこれを行うことができます(関数を仮定すると、変更しない名前):

var Person = function (name) { 
    this.name = name; 
    this.prototype=Person.prototype; 
} 

覚えておいて、それはより多くのです不便であると分かっている解決策よりも速いハックです。

1

私はthis questionthis questionだと思います。

"インスタンス"はプロトタイプを持たず、アクセスできない内部の[[Prototype]]経由でリンクされています。また、非標準(信頼性がない)であるプロトタイプを指す__proto__というプロパティがあります。