谁是javascript中全局对象/范围的原型对象?

时间:2015-06-10 06:47:14

标签: javascript node.js prototype global-object

我在Node shell中测试了这个:

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?

2 个答案:

答案 0 :(得分:2)

如果谈论的the Global Object the Global Scope相同(尽管在全局范围this === theGlobalObject中),则规范说明:

  

..全局对象的[[Prototype]]和[[Class]]内部属性的值是依赖于实现的。

要查找特定到Node.js的答案,需要参考实施(或有关做出此类决定的原因的文档)。但是,规范提供了 no 基本原理/要求。

答案 1 :(得分:0)

每个对象在null之前的原型链的头部都有一个Object。链如下:null->Object->A->B->C->D

global.__proto__.__proto__ === Object.prototype // true的工作原因是因为它跟随null,然后是Object的原型,它是新对象的构造函数。全球是环境。

希望这有帮助!