Javascript 行为奇怪的物体
问题是: 我预计动物[0]的价格会下降,但它也会降低猫[0]的价格。这是怎么发生的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
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]))
也行得通,而且实际上不会出现故障