我一直在努力地思考,原型继承与在使用构造函数实例化的每个新对象上设置方法到底如何节省内存有关。 __proto__
指向父级构造函数的原型,但是通过读取MDN似乎将父级原型上的所有方法都复制到__proto__
对象中。那么,与在实例化对象上直接创建键值对有何不同?
答案 0 :(得分:2)
父级原型上的方法未复制到__proto__
上。 __proto__
属性只是对其的引用。您可以证明使用JavaScript的严格相等比较运算符:
child.__proto__ === parent.prototype // true
它们是完全相同的对象,不是原件的副本。如果这些信息使您感到惊讶,请考虑将JavaScript中的对象通过引用存储 。因此,如果您有这样的对象:
const obj = {
prop: 'value'
};
然后将此对象分配给另一个变量:
const obj2 = obj;
没有两个单独的对象,而是有两个变量,每个变量都引用同一对象。引用不占用对象的空间,它们只是内存指针。换句话说,该对象存在一次,并且有两个引用它的变量。