por qué tengo un valor del mismo objeto en una matriz pero cuando lo selecciono así arr[0] encuentro en la consola diferentes valores
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]) }¿Tu problema es que estás imprimiendo [] undefined ?
Reelaboré tu código para dar ese resultado:
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]) } Lo que sucede está dentro del player , el code es "ArrowUp" , activando el código dentro del if para ejecutar. Ese código incrementa player.x a 2 . En este momento, ningún código ha cambiado nada relacionado con players , la matriz, por lo que sigue siendo una matriz vacía [] . Este sigue siendo el caso cuando se llama a fn después de ese cambio a player . El primer valor impreso proviene de que players son una matriz vacía. Lo undefined proviene de indexar una matriz vacía en 0 (el primer elemento de la matriz) da indefinido cuando no hay ningún objeto allí. El resultado es [] undefined .
Luego, se ejecuta players[0] = player , colocando al player en la posición 0 de la matriz. Si ejecutamos fn en este punto, debería generar: [ Player { x: 2 } ] Player { x: 2 } . Obtendrá este comportamiento colocando una fn después de players[0] = player o colocándola después de player.move("ArrowUp"); .