this

Game.prototype.restart = function () {
  this.clearLocalStorage();
  this.timer = setTimeout(function() {
    this.clearBoard();    // what is "this"?
  }, 0);
};

error: Uncaught TypeError: undefined is not a function

When you invoke setTimeout(), you are actually invoking window.setTimeout(). Therefore, this.clearBoard(); refers to the window object.

Traditional solution

  • use var self = this;

Game.prototype.restart = function () {
  this.clearLocalStorage();
  var self = this;   // save reference to 'this', while it's still this!
  this.timer = setTimeout(function(){
    self.clearBoard();    // oh OK, I do know who 'self' is!
  }, 0);
};

New solution

  • use the bind() method to pass in the proper reference:

Last updated

Was this helpful?