2017-08-10 28 views
0

在JavaScript中,每個對象都從特定原型繼承其屬性和方法,其中原型是對象。Object.prototype的構造函數

繼承形成一個原型鏈,其中(Object.prototype)位於其頂部(後面跟着沒有屬性或方法的null),並且所有對象都從中繼承(除非有人將其他更改插入到原型鏈中) 。

If(Object.prototype)是一個對象,它的構造函數是什麼?

我的意思是什麼完成這個表達式才能被評估爲真。

Object.prototype instanceof ..... 
+2

[它的海龜一路下滑(https://en.wikipedia.org/wiki/Turtles_all_the_way_down) – Barmar

+0

目前並不需要一個構造函數,它是一個內置的Object就是。你可能會問什麼是* null *的構造函數。 – RobG

+0

null雖然使用了typeof運算符,但它使用的是'object' –

回答

0

"this and Object Prototypes" book of "You don't know JS"系列凱爾Simpsion

function Foo() { 
    // ... 
} 

Foo.prototype.constructor === Foo; // true 

var a = new Foo(); 
a.constructor === Foo; // true 

Foo.prototype對象在默認情況下(在聲明時就 片斷1行!)獲取一個公共的,不可枚舉(見第二章3)屬性 調用.constructor,並且此屬性是對象返回到與對象關聯的 函數(在這種情況下爲Foo)的參考。此外,我們看到由「構造函數」調用new Foo()創建的對象a似乎也有一個名爲.constructor的屬性,其中 類似地指向「創建它的函數」。

注意:這不是真的。 a沒有.constructor屬性, ,儘管a.constructor確實解析爲Foo函數,但 「構造函數」實際上並不意味着「由...構造」,因爲它出現 。我們很快會解釋這種奇怪的。

...

「在JavaScript對象有一個內部屬性,在 說明書中的[[Prototype]],這簡直是到另一個 對象的引用。表示爲」。

所以,Object.prototype本身不是一個對象。關於你提到的有關的instanceof具體問題:

var a = new Function(); 
a.prototype instanceof Object; //true 
var b = new String(); 
b.prototype instanceof Object; //false 
+0

好吧,我現在不談論構造函數屬性。我問什麼是用於創建實例(Object.prototype)的函數構造函數。 –

+0

在你展示的例子中,創建實例a的構造函數是Foo。同樣,創建Object.prototype的構造函數是什麼? –

+0

已編輯。看看這是否澄清事情。 – Aydin4ik

相關問題