2014-10-08 71 views
0
>Object.getPrototypeOf(Object) 
[Function: Empty] 

>Object.prototype 
{} 

爲什麼我得到不同的結果?但如果我使用:Object.getPrototypeOf(Object)和Object.prototype有什麼區別?

>Object.getPrototypeOf({}) 
{} 

一切都很好。我錯過了關於getPrototypeOf的點嗎?

+0

你並沒有真正解釋你期望的結果,但我試圖解釋Object.getPrototypeOf(Object)和Object.prototype之間的區別。 – 2014-10-08 15:14:49

回答

3

Object.prototype是所有其他對象從中繼承的對象。對於內置對象,位於prototype chain。從MDN文檔:

JavaScript中的所有對象都是從Object開始的;所有對象繼承的方法和屬性從Object.prototype,儘管它們可能被重寫[...]

Object.getPrototypeOf是一個方便的方法,以得到特定對象的原型。從MDN文檔:

Object.getPrototypeOf()方法返回指定對象的原型(即內部[[Prototype]])。

不同類型的對象可以有不同的原型。

實例:

> Object.getPrototypeOf(Object) === Function.prototype 
true 

Object功能,因此它的原型是Function.prototype

> Object.getPrototypeOf(/foo/) === RegExp.prototype 
true 

/foo/創建正則表達式,因此它的原型是RegExp.prototype

> Object.getPrototypeOf([]) === Array.prototype 
true 

[]創建陣列,其原型爲Array.prototype

> Object.getPrototypeOf({}) === Object.prototype 
true 

{}創建一個簡單對象,其原型是Object.prototype

0

我有一個類似的問題:爲什麼?

Object.getPrototypeOf(Object) === Function.prototype; // true 
Object.getPrototypeOf(Object) === Object.prototype;  // false 

雖然:

Object.getPrototypeOf(Function) === Function.prototype); // true 
Object.getPrototypeOf(Function) === Object.prototype); // false 

對象和功能相同的行爲WRT getPrototypeOf,雖然Object.prototype中和Function.prototype的是不同的。 Function ===其屬性的內部[[prototype]],但Object的內部[[prototype]]不是它的屬性。

看起來很奇特(我沒有看到其他類似的情況)。

是的確,Object是一個函數,所以是Array等,所以是Function。所有都是'功能'。我們不應該說「物體是一流的功能」嗎? (而不是相反?只是開玩笑)