class LazyMan{ constructor(name){ this.name = name; this.task = []; console.log('I am Jack'); setTimeout(()=>{ this.next() }) } eat(food){ this.task.push(()=>{ console.log('eat ' + food) }) return this } sleep(time){ this.task.push(()=>{ setTimeout(()=>{ console.log(time); this.next() },time*1000) }) return this } next(){ let fn = this.task.shift(); fn && fn() } } const lazyMan = new LazyMan('Jack') lazyMan.eat('lunch').sleep(1).eat('dinner')