Пока я запускаю Object.prototype
в консоли браузера, я получаю все свойства и методы, доступные внутри Object.prototype
. Это так, как ожидалось, но когда я выполняю то же самое в терминале NodeJS, я получаю пустой объект {}
. Может ли кто-нибудь объяснить мне, почему это так? Я добавил скриншоты обоим.
Object.prototype возвращает пустой объект в узле
Ответ 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 или значение обещаний. Но это достаточно хорошо!