在对象数组中同一对象的属性中具有不同的值



为什么我在数组中有一个相同的对象的值,但是当我像这样选择它时 arr[0] 我在控制台中发现不同的值

class Player {
constructor(x){
this.x = x
}
move(code){
if(code==="ArrowUp"){
this.x +=1;
fn();
};
players[0] = player;
}
};
let players = [];
let player = new Player(1);
function fn() {
console.log(player,players[0])
}
因此,当我添加事件时,例如在文档上单击" 当它发生时,事件的函数将调用player.move(e.code)并作为参数e.code传递。 打印的播放器数组中第一个对象的 x 值与对象 Player1 和 Players[0] 中的 x 不同

您的问题是打印[] undefined吗?

我重新设计了您的代码以提供该输出:

class Player {
constructor(x){
this.x = x
}
move(code){
if(code==="ArrowUp"){
this.x +=1;
fn();
};
players[0] = player;
}
};
let players = [];
let player = new Player(1);
player.move("ArrowUp");
function fn() {
console.log(players,players[0])
}

player内部,code"ArrowUp",触发if内部的代码执行。该代码player.x递增到2。到这个时候,没有任何代码改变了与players、数组有关的任何内容,所以它仍然是一个空数组[]。在更改为player后调用fn时,情况仍然如此。打印的第一个值来自players是一个空数组。undefined来自索引一个空数组 0(数组中的第一个元素)给出 undefined,当那里没有对象时。结果是[] undefined.

之后,运行players[0] = player,将player放在数组中的第 0 个位置。如果我们在这一点上运行fn,它应该输出:[ Player { x: 2 } ] Player { x: 2 }.通过将fn放在players[0] = player之后或放在player.move("ArrowUp");之后,您将获得此行为。

相关内容

  • 没有找到相关文章

最新更新