希望实现如下
Tom.eat('breakfirst').sleep(3000).eat('lunch').sleep(3000).eat('dinner')
依次打印:breakfirst sleep(等3秒)lunch sleep(等3秒)dinner
class Person{
constructor() {
this.queue = []
setTimeout(() => {
this.next()
})
}
eat(str) {
let fn = () => {
console.log(str)
this.next()
}
this.queue.push(fn)
return this
}
sleep(time) {
let fn = () => {
console.log('sleep')
setTimeout(() => {
this.next()
}, time)
}
this.queue.push(fn)
return this
}
next() {
let fn = this.queue.shift()
fn && fn()
}
}
let Tom = new Person()
Tom.eat('breakfirst').sleep(3000).eat('lunch').sleep(3000).eat('dinner')