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

193
Views
¿Por qué setTimeout no funciona al pasar el método del objeto?

Leí muchos temas (aquí y en otros lugares) sobre setTimeout y this enlace. De todos modos, hay algo que necesito entender mejor. Comienzo con el siguiente ejemplo.

 let myObj = { p: 'my property', m() { console.log(this.p); } } setTimeout(myObj.m, 100); // undefined setTimeout(function() {myObj.m()}, 100); // 'my property'

Lo que leí de DOC es

El código ejecutado por setTimeout() se llama desde un contexto de ejecución separado de la función desde la que se llamó a setTimeout. Se aplican las reglas habituales para establecer la palabra clave this para la función llamada, y si no ha establecido esto en la llamada o con bind, se establecerá de forma predeterminada en el objeto de ventana (o global). No será lo mismo que este valor para la función que llamó setTimeout.

Y una forma de arreglar usando el contenedor de funciones.

Una forma común de resolver el problema es usar una función contenedora que establezca esto en el valor requerido.

como hice en la última declaración del fragmento.

Mi duda: ¿por qué pasar un método por obj a setTimeout sin envolverlo no funciona? Pasar object.method debería establecer this en el objeto de todos modos. Pero tal vez la invocación directa de setTimeout lo anula, forzando a this sea window .

Pensé que tal vez el uso de una función contenedora crea un nuevo alcance subyacente que puede hacer referencia a myObj por cierre y, posteriormente, llamar a setTimeout(myObj.m(), 100) establece el derecho this .

Gracias de antemano

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!