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

111
Views
Método de clase de JavaScript que no refleja los valores de campo

En el siguiente código, esperaría que se llamara a printHello dos veces (una desde go() y otra desde runTask() ):

 class Hello { task = undefined; runTask() { console.log("Task is", this.task); this.task(); } printHello() { console.log("Hello"); } go() { this.task = this.printHello; console.log("Set task to", this.task); setTimeout(this.runTask, 0); // Fails // setTimeout(() => this.runTask(), 0); // Works } }; const hello = new Hello(); hello.go(); // Says `this.task` is undefined, but then... hello.runTask(); // ... running it manually works fine

En mi mente:

  • Creo una instancia de la clase.
  • Luego llamando a go()
    • Establece el campo/propiedad de la task en esa instancia en printHello
    • Configura una solicitud para runTask la tarea después del tiempo de espera

Esperaría que se llamara a runTask con la task establecida en printHello , pero en realidad no está undefined en la llamada setTimeout . Sin embargo, si solo llamo a runTask directamente en mi instancia de hello , funciona bien. Además, si reemplazo la llamada setTimeout con una lambda, funciona bien.

Parece claro que es un tipo de problema de cierre obsoleto, simplemente no tengo un gran modelo mental o libro de reglas que me impida escribir código como este en el futuro y luego quedarme perplejo acerca de por qué no funcionó.

Estaba pensando que this se capturaría al pasar runTask , que luego debería apuntar a una tarea válida, pero ese no es el caso.

Realmente agradecería alguna información sobre exactamente por qué esto no funciona y requiere que se use la versión lambda.

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!