为什么可以';我不能在函数中设置JavaScript原型吗?

为什么可以';我不能在函数中设置JavaScript原型吗?,javascript,prototype,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.n

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

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

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

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

this.prototype= barProto
不等于

Foo.prototype= barProto
引用将由new Foo()创建的特定对象

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


关于原型继承的更多信息,请点击这里:

我大概明白你的意思了。但是我不希望创建的新对象具有原型barProto,对吗?原型是否仅在使用“新”时设置?为什么我不能在任何时候设置任何对象的prototype属性?我所说的与ben336完全相同。“为什么我不能在任何时候设置任何对象的prototype属性?”-这就是语言的工作方式。。。也许您更喜欢
var foo=Object.create(barProto)
?这同样有效,并且不需要
Foo
构造函数或
new
关键字。