2013-02-14 85 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