为什么我在数组中有一个相同的对象的值,但是当我像这样选择它时 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");
之后,您将获得此行为。