Tengo problemas para acceder a las propiedades de objeto necesarias en un método. Aquí tengo una versión simplificada de lo que estoy tratando de hacer. Tengo una clase Game que se usa para crear un nuevo objeto de juego. Una vez que se ha creado ese objeto, estoy tratando de ejecutar el método de dibujo. El método de sorteo usará información de state.house.color, pero parece que no puedo averiguar cómo acceder a él, ya que usar "esto" en dibujar no se referirá al objeto del juego. He usado .bind(this) en el pasado, pero eso no parece estar ayudando aquí, ya que necesitaría vincular un objeto, no una función. ¡Gracias por cualquier idea!
class Game { state = { house: { color: "blue" } } assets = { house: { draw(){ //some logic here such as console.log(this.state.house.color) } } } }; let testGame = new Game(); testGame.assets.house.draw();La respuesta a su problema es la función de flecha, que no anulará this .
class Game { state = { house: { color: "blue" } } assets = { house: { draw: () => { console.log(this.state.house.color); } } } } let testGame = new Game() testGame.assets.house.draw(); También puedes usar bind (peor en este caso):
class Game { state = { house: { color: "blue" } } assets = { house: { draw() { console.log(this.state.house.color); } } } } let testGame = new Game() testGame.assets.house.draw.bind(testGame)();Si bien podría crear fácilmente una función de flecha o una función vinculada que coloque en la propiedad .assets.house.draw , la solución real es no anidar propiedades en una instancia de clase como esa. Manténgalos en el nivel superior, no intente ponerles un espacio de nombres.
Si realmente lo necesita, cree una clase separada:
class House { constructor(color) { this.color = color; } draw() { console.log(this.color); } } class Game { house = new House("blue"); } const testGame = new Game(); testGame.house.draw();Pasa cualquier cosa que la casa necesite del juego a su constructor.