Кто является объектом-прототипом глобального объекта / области видимости в 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'

Мой вопрос:

  1. почему прототип глобального объекта (global scope) НЕ является Object.prototype?

  2. почему имя конструктора 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, который является конструктором для нового объекта. Глобальная среда.

Надеюсь это поможет!

Другие вопросы по тегам