我有一个包含关于国际象棋棋盘状态信息的类中的属性称为“tiles”。我试图在每次进行合法移动和游戏开始时将此属性推送到名为“moves”的数组中。但问题是,每次我推送新的“tiles”属性时,“moves”数组中先前的元素会更改为最新推送的“tiles”值。
我理解这是因为对象是通过引用传递的,因此用相同的对象替换旧元素,因为它们现在指向相同的对象,即属性“tiles”的最新值。所以,对于下面给出的代码,是否有一种方法可以将此对象推送而非引用,以便得到由于合法移动导致的每个不同的“tiles”状态。
这是我的代码片段:App.js
所以我的期望是在self.moves数组中,每个tile应该指向不同的对象而不是同一个对象。它应该包含self.tiles的不同状态,但目前,当我推动这个属性时,'moves'数组中的元素被最新的self.tiles值覆盖。
非常感谢任何解决这个问题的帮助。谢谢!
我理解这是因为对象是通过引用传递的,因此用相同的对象替换旧元素,因为它们现在指向相同的对象,即属性“tiles”的最新值。所以,对于下面给出的代码,是否有一种方法可以将此对象推送而非引用,以便得到由于合法移动导致的每个不同的“tiles”状态。
这是我的代码片段:App.js
App = function () {
var self = this;
self.tiles = [];
// this is populated with objects from a json file
//code to fetch json and save it to self.tiles
//more code
this.startGame = function () {
//other code
self.moves.push(self.tiles);
};
this.makeMove = function () {
//other code
self.moves.push(self.tiles);
};
};
所以我的期望是在self.moves数组中,每个tile应该指向不同的对象而不是同一个对象。它应该包含self.tiles的不同状态,但目前,当我推动这个属性时,'moves'数组中的元素被最新的self.tiles值覆盖。
非常感谢任何解决这个问题的帮助。谢谢!