我使用以下代码创建了一个 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 字节:
one
和two
两个属性 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/