如何在NodeJS中获取__proto__?为何与浏览器运行结果不一致
差异本质原因
两边运行时的JavaScript原型逻辑完全一致,差异仅来自控制台的输出展示规则:
- 无论浏览器还是Node.js环境,
var arr = []声明的数组,arr.__proto__指向的都是Array.prototype,存储的所有原型方法、属性完全相同,符合ECMAScript规范要求。 - 浏览器开发者控制台为调试便捷性考虑,默认会完整展开展示原型对象的所有可枚举、不可枚举成员,所以能直接看到
push、pop、map等全部数组原型方法。 - Node.js的REPL控制台默认做了输出精简优化,当识别到打印对象是
Array.prototype时,会以数组字面量格式简化展示为[],不会默认展开全部属性。
Node.js中实现和浏览器一致输出的方案
- 使用
console.dir并搭配调试配置,强制完整展开原型对象:
其中console.dir(arr.__proto__, { showHidden: true, depth: null })showHidden: true会显示不可枚举属性,depth: null会取消嵌套层级的展开限制,输出内容和浏览器控制台基本一致。 - 也可以通过标准API验证原型内容:执行
Object.getOwnPropertyNames(arr.__proto__)即可列出数组原型上的所有自有属性,确认内容完整性。 - 生产环境更推荐使用标准方法
Object.getPrototypeOf(arr)替代非标准的__proto__属性获取对象原型,兼容性和规范性更强。
内容的提问来源于stack exchange,提问作者Divyanshu Singh
相关产品推荐
相关产品推荐

