javascript - DevTools 堆快照中的 __proto__ 是什么意思?

标签 javascript google-chrome-devtools v8

我使用以下代码创建了一个 A 对象:

function A(){
    this.one = "one"
    this.two = "two"
    this[0] = "numeric index"
}
var objs = [];
for (var i=0; i<10;i++){
    // create 10 objects to get object size without slack/space for additional properties
    objs.push(new A())
}
objs.forEach(function(obj){
    obj.extraProperty = "extra"
})

正如预期的那样,DevTools 堆快照显示大小为 40 字节:

  • onetwo 两个属性 2*8 字节
  • 8 个字节用于额外属性
  • 元素 8 个字节(编号属性)
  • 8 个字节用于隐藏类

基于此explanation of V8 object representation .

但是,堆快照还将 __proto__ 列为属性,但我认为它不会增加对象的大小。

它也已经可以作为隐藏类/Map 的一部分进行访问,因此没有必要存储对它的额外引用。

__proto__ 属性只是为了方便而显示的吗?它打算如何使用?

最佳答案

它的含义与它已经代表的含义相同。实例有__proto__,类有prototype

function User(name){
    this.name = name
 }; 

var vinoth = new User("v");

vinoth.__proto__ == User.prototype //true

我们有 new User(),然后 vinoth instanceof User 为真__proto__ 查找有助于查找指向 User.prototype 的 Prototype Hierarchy,后者将进一步指向 Object,因为 一切都是对象实例。进一步的 Heirarchy lead 最终为空。

__proto__ 只是 chrome 开发工具提供的引用。

关于javascript - DevTools 堆快照中的 __proto__ 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42224098/

相关文章:

javascript - 查询 : If select has option 1 show div

javascript - Firebase TIMESTAMP 到日期和时间

javascript - Keith-Wood 日期选择器 onclick(首次单击时不起作用)

javascript - puppeteer:如何等到元素可见?

google-chrome - 如何在 Linux 上测试 google chrome 工作区?

c++ - 为什么 v8 会在 v8::Isolate::New 中出现段错误?

javascript - 错误 : ‘NewSymbol’ is not a member of ‘v8::String’ ?

javascript - ReactJS:为收集方法调用重新设置帮助文件管理器

google-chrome - 为什么 Chrome Web Developer 工具没有列出 27.0.1453.93 版本的一些 JavaScript 文件?

arrays - node.js 拼接超过 70000 个项目时速度太慢