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