为什么我不能在函数中设置JavaScript原型?

时间:2013-02-14 17:02:49

标签: javascript prototype

为什么我不能在函数内部设置原型? 例如,为什么这不起作用?

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

我不喜欢在创建函数后分配原型的语法。

2 个答案:

答案 0 :(得分:5)

this.prototype= barProto

不等于

Foo.prototype= barProto

this指的是由新的Foo()

创建的特定对象

Foo是构造函数。您可以在构造函数上设置原型,而不是在特定实例上。

有关原型继承的更多信息:Mozilla docs

答案 1 :(得分:2)

因为this.prototypeFoo.prototype不同。使用Foo调用new时,对其中this的任何引用都将引用正在创建的实例。