2013-05-30 144 views
4

爲什麼添加原型後,構造函數從Foo變爲Object?我怎樣才能訪問原始的構造函數?爲什麼構造函數改變了?

代碼:

function Foo() {} 
var foo1 = new Foo(); 
console.log('foo1: ' + foo1.constructor); 

Foo.prototype = {} 
var foo2 = new Foo(); 
console.log('foo2: ' + foo2.constructor); 

輸出:

foo1: function Foo() {} 

foo2: function Object() { 
    [native code] 
} 

http://jsfiddle.net/vDCTJ/

+1

爲什麼在覆寫之後,構造函數1仍然是被調用的? - > http://jsfiddle.net/ttqjV/ – acdcjunior

回答

7

這是因爲你給了富其原型一個全新的對象,您沒有設置該對象的「構造函數「屬性。

Foo.prototype = { constructor: Foo }; 

實例化的函數對象得到一個對象爲已在初始化這樣他們的「原型」屬性。

+0

那就是我一直在做的事情,但我只是在原型中編寫整個構造函數:P –

1

你不能。

foo1用具有constructor參照Foo,其它繼承的初始Foo.prototype對象創建的。

相比之下,foo2從您設置Foo.prototype的空對象繼承到實例化之前。並且該對象從Object.prototype繼承其constructor財產,因此foo2.constructor === Object

相關問題