Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

203
Views
¿Por qué esta desestructuración de matriz no funciona cuando se asigna a 'esto'?

Tengo una clase que ejecuta una función cloneButtons durante la construcción. La función cloneButtons toma una matriz oldButtons y devuelve una matriz newButtons con exactamente los mismos elementos. Mi problema es que me encuentro con un comportamiento extraño cuando trato de deconstruir la matriz. Cada vez que uso this para hacer una tarea de clase, las cosas simplemente dejan de funcionar.

Soy nuevo en JS, pero no puedo encontrar ninguna documentación sobre las limitaciones de usar this y por qué no funcionaría al desestructurar el valor de retorno de una función.

Estos son algunos ejemplos de lo que funciona y lo que no. El siguiente código funciona según lo previsto: los elementos en cloneButtons deconstruyen sin problemas.

 constructor () { const oldButtons = document.querySelectorAll('#hero-action-btn-cont button') const [attackBtn, healBtn, specialBtn] = Utils.cloneButtons(oldButtons) attackBtn.addEventListener('click', this.attackHandler.bind(this)) // this works perfectly }

Sin embargo, si trato de asignar los elementos de la matriz usando this mientras se desestructura en cualquier paso del proceso, obtengo una variedad de errores, todos derivados del hecho de que cualquier variable que tenga this permanece sin definir. Esto arroja un error de inicialización:

 constructor () { const oldButtons = document.querySelectorAll('#hero-action-btn-cont button') [this.attackBtn, this.healBtn, this.specialBtn] = Utils.cloneButtons(oldButtons) this.attackBtn.addEventListener('click', this.attackHandler.bind(this)) // cannot access oldButtons before initialization }

Otro método que no funciona:

 constructor () { const oldButtons = document.querySelectorAll('#hero-action-btn-cont button') this.newButtons = Utils.cloneButtons(oldButtons) [this.attackBtn, this.healBtn, this.specialBtn] = this.newButtons this.attackBtn.addEventListener('click', this.attackHandler.bind(this)) // this.attackBtn is undefined }

Para ayudar a identificar lo que va mal, aquí hay otro escenario que funciona perfectamente, que no implica desestructuración:

 constructor () { const oldButtons = document.querySelectorAll('#hero-action-btn-cont button') this.newButtons = Utils.cloneButtons(oldButtons) this.newButtons[0].addEventListener('click', this.attackHandler.bind(this)) //works but does not use destructuring }

Además, ni siquiera puedo ejecutar this.oldButtons = document.querySelectorAll(#id) ya que, por alguna razón, devuelve undefined. ¡¿Que me estoy perdiendo aqui?!

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!