2016-12-23 43 views

回答

1

Foo.prototype不是富功能本身的原型。它是使用new Foo()創建的任何對象的原型。功能Foo的原型僅爲Function.prototype

console.log(Function.prototype.isPrototypeOf(Foo)); // true 
console.log(Foo.prototype.isPrototypeOf(new Foo())); // true 

在Object.prototype中的情況下,這就是原型鏈的最頂端,併爲任何不另有明確突破原型鏈返回true。在對象的情況下,因爲它是一個構造函數:

console.log(typeof Object); // function 
console.log(Object.__proto__ === Function.prototype); // true 

而且因爲Function.prototype的本身就是一個對象,然後:

console.log(Object.__proto__.__proto__ === Object.prototype); // true 

這就是爲什麼console.log(Object.prototype.isPrototypeOf(Object));是真的,因爲存在的Object.prototype在Object構造函數的原型鏈中。具體來說,它是函數原型的原型。

下面是這些對象和功能如何相關的圖表。藍色的矩形表示對象,圓角的綠色矩形是函數(這是一種特殊類型的對象)。粗黑線是每個對象的原型鏈,虛線表示使用構造函數的.prototype屬性如何關聯對象。 Javascript prototype chain

+0

感謝您的詳細解釋。 console.log(Function.prototype.isPrototypeOf(Foo); ** // true ** 以粗體顯示的文本應該在您的答案中爲錯誤,請更正它 –

+0

@JyotiPrasadPal否,Function.prototype.isPrototypeOf(Foo)如果Foo是一個函數,它肯定是真的,你可以在控制檯中試試它,下面是一個演示原型鏈的小提示:https://jsfiddle.net/931e33an/3/ – PMV

+0

對不起,我的壞。語法錯誤在下面的行中,你可以在最後修改小括號「)」。 console.log(Function.prototype.isPrototypeOf(Foo)); // true –

相關問題