Lazy Man
这题我本以为不会被考到,直到我去年面的深信服一面给我出了这道题,磕磕碰碰才完成,在这里记录一下
实现一个LazyMan,可以按照以下方式调用: LazyMan(“Hank”)输出: Hi! This is Hank!
LazyMan(“Hank”).sleep(10).eat(“dinner”)输出 Hi! This is Hank! //等待10秒.. Wake up after 10 Eat dinner~
LazyMan(“Hank”).eat(“dinner”).eat(“supper”)输出 Hi This is Hank! Eat dinner~ Eat supper~
LazyMan(“Hank”).sleepFirst(5).eat(“supper”)输出 //等待5秒 Wake up after 5 Hi This is Hank! Eat supper 以此类推。
class _LazyMan {
constructor(name) {
this.tasks = []
const task = () => {
console.log(`Hi! This is ${name}`);
this.next()
}
this.tasks.push(task)
setTimeout(() => {
this.next()
})
}
next() {
const task = this.tasks.shift() // 这里第一次写的时候写反了,写成pop()
task && task()
}
sleepWrap(time, first) {
const task = () => {
setTimeout(() => {
console.log(`Wake up after ${time}`);
this.next()
}, time * 1000)
}
if(first) {
this.tasks.unshift(task)
} else {
this.tasks.push(task)
}
}
sleep(time) {
this.sleepWrap(time, false)
return this
}
sleepFirst(time) {
this.sleepWrap(time, true)
return this
}
eat(food) {
const task = () => {
console.log(`eat ${food}`);
this.next()
}
this.tasks.push(task)
return this
}
}
function LazyMan(name) {
return new _LazyMan(name)
}
LazyMan('Hank').sleep(3).eat('dinner')Updated on 4/22/2023