2013-02-14 57 views
1

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

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

因为this.prototypeFoo.prototype不一样。当Foonew一起被调用时,其中任何对this的引用都会引用正在创建的实例。

+0

我八九不离十让你在说什么。但是我不希望创建的新对象具有原型barProto,对吗?原型仅在使用“新”时才被设置?为什么我无法随时设置任何对象的原型属性? – Eddie 2013-02-14 17:13:16

+0

我在说的和ben336完全一样。 “为什么我无法随时设置任何物体的原型属性?” - 这就是语言的工作原理......也许你更喜欢'var foo = Object.create(barProto)'?这也起作用,并且不需要'Foo'构造函数或'new'关键字。 – bfavaretto 2013-02-14 17:19:53

5
this.prototype= barProto 

不等同于

Foo.prototype= barProto 

this是指将由新的Foo创建的特定对象()

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

在这里原型继承的更多信息:Mozilla docs

相关问题