我使用以下代码创建了一个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
extra properties
elements
(编号属性)的8个字节基于此explanation of V8 object representation。
但是,堆快照还会将__proto__
列为属性,但我认为它不会向对象的大小添加任何内容。
它也可以作为隐藏类/ Map的一部分进行访问,因此不需要存储对它的附加引用。
为方便起见,是否显示了__proto__
属性?它是如何被使用的?
答案 0 :(得分:2)
它具有与其已有的相同含义。实例有__proto__
,类有prototype
。
function User(name){
this.name = name
};
var vinoth = new User("v");
vinoth.__proto__ == User.prototype //true
我们有new User()
,然后vinoth instanceof User is true
。 __proto__
查找有助于查找原型层次结构,该原型层次结构将指向User.prototype
,这将进一步指向Object
,因为所有内容都是对象实例。进一步的Heirarchy导致最终为空。
__proto__
只是chrome dev工具提供的参考。