2

関数内にプロトタイプを設定できないのはなぜですか? たとえば、なぜこれが機能しないのですか?

var Bar = function(){
   this.name='Bar'
}

var barProto = new Bar()  

var Foo = function(){
    this.prototype= barProto
}

var foo = new Foo()
console.log(foo.name) // undefined

しかし、これはうまくいきます:

var Bar = function(){
   this.name='Bar'
}

var barProto = new Bar()  

var Foo = function(){

}

Foo.prototype= barProto

var foo = new Foo()

console.log(foo.name) // Bar

関数を作成した後でプロトタイプを代入する構文が好きではありません。

4

2 に答える 2

5
this.prototype= barProto

と同等ではありません

Foo.prototype= barProto

thisnew Foo() によって作成される特定のオブジェクトを参照します

Foo はコンストラクター関数です。特定のインスタンスではなく、コンストラクターにプロトタイプを設定します。

プロトタイプ継承の詳細については、Mozilla docsを参照してください。

于 2013-02-14T17:07:34.950 に答える
2

this.prototypeと同じではないからですFoo.prototype。がFooで呼び出されるとnewthis内部への参照は作成中のインスタンスを参照します。

于 2013-02-14T17:06:21.297 に答える