Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

110
Vistas
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
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda