JSFiddle - React, Tailwind, and code Playground

JavaScript

// This works
var count = 0;

var move = function() {
  console.log("move");
  if (count < 5) {
    count += 1;
    setTimeout(move, 500);
  }
}

var start = function() {
  console.log("start");
  move();
}

start();

// This doesn't work
function Foo() {
  this.count_a = 0;
}

Foo.prototype.start_a = function() {
  console.log("start-a");
  this.move_a();
}

Foo.prototype.move_a = function() {
  console.log("moving-a");
  console.log("count-a: " + this.count_a);
  if (this.count_a < 5) {
    this.count_a += 1;
    setTimeout(this.move_a, 500);
    // setTimeout(function() { this.move_a(); }, 500);
  }
}

var f = new Foo();
f.start_a();