当我用JavaScript创建一个类数组时,对其进行编辑会影响该数组中所有其他创建的对象。我的节点版本为8.11.4。
我尝试使用.push()方法向数组发送更新,但它仍然影响数组中的每个对象,而不仅仅是预期的对象。
这是数组对象的类。 Tile.js
let isObstacle;
class Tile {
constructor(){
isObstacle = false;
}
setObstacle() {
isObstacle = true;
}
getObstacleStatus() {
return isObstacle;
}
}
module.exports = Tile;
这是Tile对象数组所在的第二类。 Test.js
const Tile = require('./Tile');
let g = [];
//g[0] = new Tile();
//g[1] = new Tile();
g.push(new Tile());
g.push(new Tile());
console.log(g[0].getObstacleStatus());
console.log(g[1].getObstacleStatus());
//g[0].setObstacle();
g.push(g[0].setObstacle());
console.log(g[0].getObstacleStatus());
console.log(g[1].getObstacleStatus());
预期结果是:
假 错误
是 错误
实际结果是:
假 错误
是 是
g [0] .setObstacle();应该只将isObstacle的g [0]实例设置为true,而是将g [0]和g [1]都设置为true。
答案 0 :(得分:3)
您正在做的是一个正在修改名为isObstacle
的全局变量的类。您是在课堂外声明该变量。
只需声明isObstacle
作为类的属性即可。
class Tile {
constructor() {
this.isObstacle = false;
}
setObstacle() {
this.isObstacle = true;
}
getObstacleStatus() {
return this.isObstacle;
}
}