Object.prototype возвращает пустой объект в узле

Пока я запускаю Object.prototype в консоли браузера, я получаю все свойства и методы, доступные внутри Object.prototype. Это так, как ожидалось, но когда я выполняю то же самое в терминале NodeJS, я получаю пустой объект {}. Может ли кто-нибудь объяснить мне, почему это так? Я добавил скриншоты обоим.

Browser

Terminal

Ответ 1

Это связано с тем, что console.log() в узле использует util.inspect(), который использует Object.keys() для объектов и возвращает только перечисленные свойства. И Object.prototype содержит неперечислимые свойства, поэтому возвращает пустой узел.

Подобное поведение можно наблюдать в приведенном ниже фрагменте, когда мы console.log(Object.prototype) регистрируем пустой {};

console.log(Object.prototype);

Ответ 2

Кстати, вы можете использовать Object.getOwnPropertyNames если хотите узнать или получить доступ к этим свойствам.

> Object.getOwnPropertyNames(Object.prototype)
[ 'hasOwnProperty',
  'constructor',
  'toString',
  'toLocaleString',
  'valueOf',
  'isPrototypeOf',
  'propertyIsEnumerable',
  '__defineGetter__',
  '__lookupGetter__',
  '__defineSetter__',
  '__lookupSetter__',
  '__proto__' ]

Он не будет перечислять другие свойства, которые вы можете найти в консоли Chrome chrome, например scope или значение обещаний. Но это достаточно хорошо!