为什么我不能在函数内部设置原型? 例如,为什么这不起作用?
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
我不喜欢在创建函数后分配原型的语法。
答案 0 :(得分:5)
this.prototype= barProto
不等于
Foo.prototype= barProto
this
指的是由新的Foo()
Foo是构造函数。您可以在构造函数上设置原型,而不是在特定实例上。
有关原型继承的更多信息:Mozilla docs
答案 1 :(得分:2)
因为this.prototype
与Foo.prototype
不同。使用Foo
调用new
时,对其中this
的任何引用都将引用正在创建的实例。