Tengo un objeto que se parece a esto:
const state = [] const spells = [ { name: 'test', channelDuration: 1000, castDuration: 1000, cast: () => { state.push(THIS) // <-- } }, {...}, {...} ] Cuando un jugador usa un hechizo, ese hechizo se almacena en el estado del juego y luego espera a que channelDuration y castDuration .
Una vez que puede cast , mira el estado y llama al método de conversión:
State.quest.bossFightState[USER].spell.cast() state = [Spell] En dicho lanzamiento, necesito empujar el hechizo a una nueva matriz llamada statuses . Sin embargo, no puedo hacer referencia al objeto dentro del método de lanzamiento sin usar algunas funciones auxiliares adicionales para agarrar el hechizo específico. Y no quiero pasar agregar un spell de parámetro en el método de lanzamiento porque eso parece tonto.
¿Algunas ideas? O es un método de ayuda el camino a seguir aquí.
Una opción sería usar una function o método en lugar de una función de flecha, de modo que .cast tenga un this que se refiera al objeto externo.
const state = [] const spells = [ { name: 'test', cast() { state.push(this) } } ] spells[0].cast(); console.log(state);Me sorprende que nadie más haya captado esto... Estás usando this dentro de una función de flecha. this palabra clave actúa de manera diferente en las funciones de flecha; lea más sobre eso aquí
const state = []; const spells = [ { name: 'test', cast: function () { state.push(this); }, }, ]; spells[0].cast(); console.log(state);