2017-03-18 75 views
0

我對javascript的Object.prototype和Anything.prototype感到困惑。javascript Object.prototype VS Anything.prototype

在Chrome控制檯,我有下面的代碼:

enter image description here

我的問題:

  1. 默認原型的任何函數是對象的一個​​實例。這樣對嗎?
  2. 如果1爲真。所以,Anything.prototype和Object.prototype都是Object的一個實例。 Object.prototype是一個__proto__ === null的實例。因此,Object.prototype是原型鏈頂部的特殊實例。我能這樣理解嗎?

回答

2

任何函數的默認原型是Object的一個實例。

是的,任何function.prototype屬性包含從Object.prototype繼承的對象:

Object.getPrototypeOf(Anything.prototype) === Object.prototype // true 

所以,無論Anything.prototypeObject.prototype是對象的實例。

我不會說Object.prototypeObject實例,因爲它定義是什麼 - 它不會從Object.prototype繼承,就像你說的自己:

Object.getPrototypeOf(Object.prototype) === null // true 
Object.prototype instanceof Object // false, because 
Object.prototype.isPrototypeOf(Object.prototype) // false (obviously) 

因此,Object.prototype是原型鏈頂部的特殊實例。

是的,儘管我說的每原型鏈的頂部null

+0

具體來說,'Object.prototype'是[...一個不變的原型奇異物體...](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-properties它的\ [\ [Prototype \] \]內部插槽爲'null')。確實,不是「Object」的實例,儘管它是一個對象。 –

+0

@ T.J.Crowder異域風情並不意味着它不能成爲Object的實例,但是的確,它確實非常特別。 – Bergi

+0

我沒有說過。但其[[Prototype]]槽爲空,它不是Object的一個實例。 –

相關問題