2015-06-10 68 views
0

我在節點殼測試此:誰是javascript中全局對象/作用域的原型對象?

var a = {} 
a.__proto__ === Object.prototype // true 

global.__proto__ === Object.prototype // false 
global.__proto__.__proto__ === Object.prototype // true 

global.constructor.name // 'Object' 
global.__proto__.constructor.name // 'Object' 

我的問題:

  1. 爲什麼全局對象(全局範圍)的原型是不是Object.prototype中?

  2. 爲什麼global的構造函數名顯示爲'Object',但它的原型不是Object.prototype?

+0

'global'從哪裏來?這不是標準的JavaScript;無論如何 - [環境]範圍沒有原型。 – user2864740

+0

您是否意識到'global'是node.js在其環境中自己構建的東西?這不是Javascript的標準部分。您的數據使它看起來像是從Object繼承的對象。 – jfriend00

+0

@ user2864740我在Node shell和SpiderMonkey的JS shell中測試了這段代碼。結果是一樣的。將全局變爲「this」具有相同的輸出。 – matianfu

回答

0

每個對象的原型鏈頭都有一個對象,位於null之前。鏈條如下:null->Object->A->B->C->D

原因global.__proto__.__proto__ === Object.prototype // true的工作原因是它遵循null,然後Object的原型,它是新對象的構造函數。全球是環境。

希望這會有所幫助!

+0

種類,但不是真正的文檔和窗口是DOM中最高級的結構。我知道這是一個不好的例子,但它是目前我能想到的唯一的js環境例子。 – wordSmith

2

如果談論the Global Object這是不一樣the Global Scope(儘管在全球範圍內this === theGlobalObject)說明書陳述:

..的[[原型]]和[[類的值]]全局對象的內部屬性是依賴於實現的。

爲了找到答案,這是具體到Node.js的,執行(或文件上爲什麼這樣一個決定是),將需要進行協商。然而,規範提供的理由/要求是