Javascript 行为奇怪的物体

Javascript 行为奇怪的物体,javascript,object,Javascript,Object,问题是: 我预计动物[0]的价格会下降,但它也会降低猫[0]的价格。这是怎么发生的 function Cat( name, size, price, colour, food) { this.name = name; this.size = size; this.price = price; this.colour = colour; this.food = food; } Cattypes = []; Cattypes.push(new Cat("Dinky",20,1

问题是: 我预计动物[0]的价格会下降,但它也会降低猫[0]的价格。这是怎么发生的

function Cat( name, size, price, colour, food)
{
  this.name   = name;
  this.size = size;
  this.price = price;
  this.colour = colour;
  this.food = food;
}
Cattypes = [];
Cattypes.push(new Cat("Dinky",20,150,"blue","fish"));
Animals = [];
Animals[0].push(Cattypes[0]);
Animals[0].price -= 140;
alert(Cattypes[0].price);

它们是同一个物体。下面是一种创建各种克隆的快捷方法:

Animals.push(Object.create(Cattypes[0]));
在不支持
对象的旧浏览器上不起作用。创建


现在,如果你做
动物[0],价格-=140
Cattypes[0]
将不受影响。但是,由于此方法依赖于原型,如果您更改
Cattypes[0]。price
而不设置
Animals[0]。price
首先,
Animals[0]。price
也会更改。它们是相同的对象。下面是一种创建各种克隆的快捷方法:

Animals.push(Object.create(Cattypes[0]));
在不支持
对象的旧浏览器上不起作用。创建


现在,如果你做
动物[0],价格-=140
Cattypes[0]
将不受影响。但是,由于此方法依赖于原型,如果您更改
Cattypes[0]。price
而不设置
Animals[0]。price
首先,
Animals[0]。price
也会更改。它们是相同的对象。下面是一种创建各种克隆的快捷方法:

Animals.push(Object.create(Cattypes[0]));
在不支持
对象的旧浏览器上不起作用。创建


现在,如果你做
动物[0],价格-=140
Cattypes[0]
将不受影响。但是,由于此方法依赖于原型,如果您更改
Cattypes[0]。price
而不设置
Animals[0]。price
首先,
Animals[0]。price
也会更改。它们是相同的对象。下面是一种创建各种克隆的快捷方法:

Animals.push(Object.create(Cattypes[0]));
在不支持
对象的旧浏览器上不起作用。创建


现在,如果你做
动物[0],价格-=140
Cattypes[0]
将不受影响。但是,由于此方法依赖于原型,如果您更改
Cattypes[0]。price
而不设置
animates[0]。price
首先,
animates[0]。price
也将更改。

在JavaScript中将对象传递给函数时,将传递对此对象的引用。对象不会被复制。将
Cattypes[0]
添加到
Animals
数组时,不会复制对象。您正在访问同一个对象

Animals[0].price -= 140; // here, Animals[0] is the same as Cattypes[0]
这是“为什么会发生”这个问题的答案。
如果您想知道如何解决这个问题,有很多方法可以复制对象。请看一下

在JavaScript中将对象传递给函数时,将传递对该对象的引用。对象不会被复制。将
Cattypes[0]
添加到
Animals
数组时,不会复制对象。您正在访问同一个对象

Animals[0].price -= 140; // here, Animals[0] is the same as Cattypes[0]
这是“为什么会发生”这个问题的答案。
如果您想知道如何解决这个问题,有很多方法可以复制对象。请看一下

在JavaScript中将对象传递给函数时,将传递对该对象的引用。对象不会被复制。将
Cattypes[0]
添加到
Animals
数组时,不会复制对象。您正在访问同一个对象

Animals[0].price -= 140; // here, Animals[0] is the same as Cattypes[0]
这是“为什么会发生”这个问题的答案。
如果您想知道如何解决这个问题,有很多方法可以复制对象。请看一下

在JavaScript中将对象传递给函数时,将传递对该对象的引用。对象不会被复制。将
Cattypes[0]
添加到
Animals
数组时,不会复制对象。您正在访问同一个对象

Animals[0].price -= 140; // here, Animals[0] is the same as Cattypes[0]
这是“为什么会发生”这个问题的答案。
如果您想知道如何解决这个问题,有很多方法可以复制对象。请看一看

对象是通过引用传递的,而不是通过值传递的-
Cattypes[0]
动物[0]
相同的对象,不完全相同的

对象是通过引用传递的,而不是通过值传递的-
Cattypes[0]
动物[0]
相同的对象,不相同的对象。

对象是通过引用传递的,而不是通过值-
类型[0]
动物[0]
相同的对象,不相同的对象。

对象是通过引用传递的,而不是通过值-
类型[0]
动物[0]
相同的对象,不相同的对象。

我相信(JSON.parse(JSON.stringify(Array[number]))解决了这个问题?虽然它可能会起作用,但我建议您使用@bfavareto给出的答案或我相信的链接(JSON.parse)中提到的东西(JSON.stringify(Array[number])解决了这个问题?虽然它可能会起作用,但我建议您使用@bfavaretto给出的答案,或者使用我相信的链接中提到的内容(JSON.parse(JSON.stringify(Array[number]))修复了问题?虽然它可能会起作用,但我建议您使用@bfavaretto给出的答案或我相信的链接中提到的内容(JSON.parse(JSON.stringify(Array[number]))修复问题?虽然它可能会起作用,但我建议您使用@bfavaretto给出的答案或我在gaveThanks的链接中提到的某个东西,它会起作用!遗憾的是,由于某种原因,我无法接受答案,它说等5分钟。我尝试过(JSON.parse(JSON.stringify(Array[number]))这也行得通,虽然它的连线时间有点长。是的
JSON.parse(JSON.stringify(Array[number]))
也行得通,而且实际上不会遇到我在答案末尾提到的小故障。谢谢,它行得通!遗憾的是,出于某种原因,我不能接受答案,它说等5分钟。我试过了(JSON.parse(JSON.stringify(Array[number])))这也行得通,尽管连线的时间要长一点。是的
JSON.parse(JSON.stringify(Array[number]))
也行得通,而且实际上不会出现故障