【问题标题】:Where are the properties stored in prototypes are saved?存储在原型中的属性保存在哪里?
【发布时间】:2023-04-08 01:18:01
【问题描述】:

如果创建了一个对象实例,那么在我们为原型属性定义值之前,使用其原型定义的属性将不会附加到该实例。

我的问题是任何实例的原型属性存储在哪里?如果这些属性存储在同一个实例中,那么使用原型的优势是什么,因为它消耗相同的内存空间?

【问题讨论】:

  • 原型属性存储在原型中,所有实例都没有一个原型
  • 如果它为所有实例单独存储,那么原型的更改将需要所有子实例的更改。因此,instance 将引用存储在原型本身中的属性。
  • @JonasW。是的,所有实例都只有一个原型,但该原型的值存储在哪里?如果它存储在同一个实例中,那么它将消耗与不使用原型时相同的内存。那么使用原型有什么好处呢?
  • @gurvinder372,我只是想知道这是否会在不使用原型的情况下占用相同的内存空间?
  • 我想你不明白references的概念

标签: javascript object properties prototype


【解决方案1】:

我的问题是任何实例的原型属性在哪里 存储?如果这些属性存储在同一个实例中,那么 使用原型有什么好处,因为它消耗 相同的内存空间?

Tl,博士

父对象

原型属性继承的,因此它们不会存储在单个实例中相同。

这些单独的实例保持对原型的属性的引用,这样如果原型的属性发生变化,它就会反映在每个实例对象

示例

让我们举一个对象的例子。

var obj = function(){};

将属性a1 添加到obj

obj.prototype.a1 = 1;

创建obj 的子实例childObj1 并检查原型属性是否被继承。

var childObj1 = new obj();
console.log( childObj1 ); //show a1

创建obj 的另一个属性a2 并检查原型属性是否被继承。

obj.prototype.a2 = 2;
console.log( childObj1 ); //show a1 and a2

创建obj 的另一个子实例childObj2 并检查原型属性是否被继承。

var childObj2 = new obj();
console.log( childObj2 ); //show a1 and a2

obj.prototype.a3 = 3;
console.log( childObj1 ); //show a1, a2 and a3
console.log( childObj2 ); //show a1, a2 and a3

var obj = function(){};

obj.prototype.a1 = 1;

var childObj1 = new obj();
console.log( childObj1 ); //show a1

obj.prototype.a2 = 2;
console.log( childObj1 ); //show a1 and a2

var childObj2 = new obj();
console.log( childObj2 ); //show a1 and a2

obj.prototype.a3 = 3;
console.log( childObj1 ); //show a1, a2 and a3
console.log( childObj2 ); //show a1, a2 and a3

【讨论】:

  • 很好解释..!我想问如果我们这样做会发生什么:- childObj1.a1 = 234;这个 a1 会被存储到实例内存还是其他任何地方?
  • 只有 a1 值会被更新,因为您更新的是实例的属性,而不是它继承的实例的原型属性
最近更新 更多