gpt4 book ai didi

javascript - 无法弄清楚为什么数组不应该更新?

转载 作者:行者123 更新时间:2023-12-02 18:47:36 25 4
gpt4 key购买 nike

我正在使用 Javascript 和 HTML5 Canvas 构建 Conway 的生命游戏。这里的代码位于 gameOfLife 对象的上下文中:

this.cells = [];
this.nextCellState = [];

用我的单元格对象填充 this.cells 后,我像这样填充 this.nextCellState :

this.nextCellState = this.nextCellState.concat(this.cells);

鼠标单击时,相应的单元格对象属性 isAlive 变为 true:

function clickAlive(x, y) {
for (var i in this.cells) {
if (x.between(this.cells[i].x, this.cells[i].x + cellsize) && y.between(this.cells[i].y, this.cells[i].y + cellsize)) {
this.cells[i].isAlive = true;
console.log('Breakpoint');
}
}
}

问题是,在断点处查看 cellsnextCellState 数组,它们都将单击的单元格激活为 true .

这是什么原因造成的?

最佳答案

当您将 cells 的内容复制到 nextCellState 时,您正在制作数组的浅拷贝。对象本身现在由两个数组指定别名(即 cells[0]nextCellState[0] 引用同一对象)。

您需要在 nextCellState 中创建新对象才能独立更改对象的内部状态。最简单的方法是您的单元格对象具有复制构造函数。然后你可以做这样的事情:

this.nextCellState = this.nextCellState.concat(
this.cells.map(function(cell) {
return cell.copy(); // or whatever your copy constructor is
})
);

关于javascript - 无法弄清楚为什么数组不应该更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16199191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com