数组中的Node.js类对象相互影响

时间:2019-04-28 18:33:43

标签: javascript arrays node.js class

当我用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。

1 个答案:

答案 0 :(得分:3)

您正在做的是一个正在修改名为isObstacle的全局变量的类。您是在课堂外声明该变量。

只需声明isObstacle作为类的属性即可。

class Tile {
  constructor() {
    this.isObstacle = false;
  }

  setObstacle() {
    this.isObstacle = true;
  }

  getObstacleStatus() {
    return this.isObstacle;
  }
}