Кто является объектом-прототипом глобального объекта / области видимости в javascript?
Я проверил это в оболочке Node:
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'
Мой вопрос:
почему прототип глобального объекта (global scope) НЕ является Object.prototype?
почему имя конструктора global отображается как Object, но его прототип не является Object.prototype?
2 ответа
Если говорить о глобальном объекте, который не совпадает с глобальным объемом (хотя в глобальном масштабе this === theGlobalObject
) спецификация гласит:
.. Значения внутренних свойств [[Prototype]] и [[Class]] глобального объекта зависят от реализации.
Чтобы найти ответ, специфичный для Node.js, необходимо обратиться к реализации (или документации о том, почему было принято такое решение). Однако в спецификации нет обоснования / требования.
У каждого объекта есть Объект во главе их цепочки прототипов прямо перед нулем. Цепочка выглядит следующим образом: null->Object->A->B->C->D
Причина global.__proto__.__proto__ === Object.prototype // true
работает потому, что он следует null, а затем прототипу Object, который является конструктором для нового объекта. Глобальная среда.
Надеюсь это поможет!