How do you fix this in setTimeout inside a method in JavaScript?
Use an arrow function for the setTimeout callback. The arrow inherits this from the method (which is the object). Do not use a regular function, which loses this.
Verify This Answer
Cross-check this information using these trusted sources:
More FAQs in this Keyword Pitfalls and Fixes in JavaScript
Lost this in callbacks, arrow methods on objects (lexical this), forgetting new, this in setTimeout/forEach inside methods, destructured methods (detached), and expecting arrows to have object this.
Use .bind(obj) to permanently bind this, or wrap the method call in an arrow function (() => obj.method()). Arrows inherit this lexically from the enclosing scope, so they preserve the correct binding.
Because an arrow function's this is the enclosing scope's this, not the object. So obj.greet = () => this.name gives undefined. Use regular functions for methods so this is the object.
Still have questions?
Browse all our FAQs or reach out to our support team
