2017-01-09 83 views
0

我正在查看下面的代碼的層次結構(原型鏈),我不明白第二個(較低的Object)來自哪裏。我知道「t」變量是Object對象的實例,但爲什麼第一個Object下還有另一個Object?我認爲Object是鏈中的最後一環。所以,我很困惑,因爲這種打印測試=>對象=>對象爲什麼在Javascript原型鏈中有一個函數有兩個Object

function test(){ } 
var t = new test() 
console.log(t) 

enter image description here

澄清:使用Chrome瀏覽器

回答

4

t是一個對象,其原型是對象其原型是Object.prototype。這是預料之中的;如果t的原型直接爲Object.prototype,那麼向t's原型添加屬性將會影響所有對象,而不僅僅是t以及由new test創建的其他對象。這不是可取的,因此中間對象的原型是Object.prototype。

進一步闡明:當你聲明一個函數時,它的原型屬性被設置爲一個新的空對象,並且默認情況下,對象的原型爲Object.prototype

t的原型是test.prototypetest.prototype的原型是Object.prototype

+0

@RobG是的,已更正。 – Paulpro

+0

那麼,第一個對象是測試函數原型,然後第二個是測試函數基於的最終對象原型? – user3092075

+0

@ user3092075這基本上是準確的,但請注意'test'的原型與'test.prototype'(確定從'new test'創建的對象原型的屬性)不同。 'test'的實際原型是'Function.prototype'。例如。 'Object.getPrototypeOf(test)=== Function.prototype;',它與'test.prototype'不同; 'test.prototype'只是一個空對象(它具有Object.prototype的原型)。 – Paulpro

相關問題