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

Javascript 数组中的Node.js类对象相互影响,javascript,arrays,node.js,class,Javascript,Arrays,Node.js,Class,当我用JavaScript创建一个类数组时,编辑一个类会影响数组中所有其他创建的对象。我在节点版本8.11.4上 我尝试使用.push()方法向数组发送更新,但它仍然影响数组中的每个对象,而不仅仅是预期的对象 这是数组对象所在的类。 Tile.js 这是放置平铺对象数组的第二个类。Test.js const Tile = require('./Tile'); let g = []; //g[0] = new Tile(); //g[1] = new Tile(); g.push(new

当我用JavaScript创建一个类数组时,编辑一个类会影响数组中所有其他创建的对象。我在节点版本8.11.4上

我尝试使用.push()方法向数组发送更新,但它仍然影响数组中的每个对象,而不仅仅是预期的对象

这是数组对象所在的类。 Tile.js


这是放置平铺对象数组的第二个类。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].setBarrier();只应将IsobStable的g[0]实例设置为true,但它将g[0]和g[1]都设置为true。

您所做的是修改名为IsobStable的全局变量的类。您正在类外声明该变量

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

  setObstacle() {
    this.isObstacle = true;
  }

  getObstacleStatus() {
    return this.isObstacle;
  }
}
只需将
isostable
声明为类的属性

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

  setObstacle() {
    this.isObstacle = true;
  }

  getObstacleStatus() {
    return this.isObstacle;
  }
}

让Isobstable
位于类实例外部。将其声明为实例属性。