我在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'
我的问题:
为什么全局对象(全局范围)的原型不是Object.prototype?
为什么global的构造函数名称显示为'Object'但它的原型不是Object.prototype?
答案 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的原型,它是新对象的构造函数。全球是环境。
希望这有帮助!