为什么为不同的对象指定相同的值
Why different objects are assigned the same value?
为什么不同的对象plyers[o]和plyers[1]被分配相同的值?虽然应该有1 的差异
var player = {
'money': 1,
'increase' : 10
}
var players = [];
for (var i=0;i<2;i++){
players[i] = player;
}
for (var i=0;i<3;i++){
for (var j=0;j<players.length;j++){
players[j]['money'] += (players[j]['increase']+j)
console.log(players[0].money + ' ___0')
console.log(players[1].money + ' ___1')
}
}
控制台:
11 ___0
11 ___1
22 ___0
22 ___1
32 ___0
32 ___1
进行时
players[i] = player;
您不是在创建player
的副本并将其分配给players[i]
,而是使players[i]
引用player
对象。因此,数组的所有元素都指向同一个对象。
你可能想做的是克隆对象,比如这个
players[i] = JSON.parse(JSON.stringify(player));
注意:只有当对象中没有函数并且没有继承链时,我提到的克隆方法才能正常工作。您可以按照这个问题来了解有关克隆JavaScript对象的其他方法的更多信息。
相关文章:
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 为什么可以't我在JavaScript中获取导航器对象的属性计数
- 为什么我要将函数添加到对象原型中,而不是将其添加到对象中
- 为什么可以't我用Set对象调用Array.prototype.map
- 为什么控制台没有't使用输入的对象's的`toString`方法
- 创建新对象时,为什么要更新旧对象
- 为什么要使用立即调用的函数来创建新对象
- 为什么document.getElementsByClassName(“className”)返回对象
- 为什么代码会指向window对象
- 为什么数组在对象内部迭代对象时存储重复值
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- 为什么Angularjs服务返回的是字符数组而不是对象数组
- NodeJS应用程序只显示第一个JSON对象.为什么?
- JavaScript:古代代码使用“new”关键字启动简单对象.为什么
- JavaScript 对象 - 为什么未定义的属性
- UnCaught TypeError-Javascript中的嵌套对象?为什么不允许这样做?对象文字表示法有效
- 对象.为什么我的代码输出对象而不是名称字符串值
- NodeJS模块填充的数组变成空对象.为什么