大厂(微信)面试题--实现lazyMan

实现一个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').sleep(10).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~
以此类推。

陷入思考...

陷入思考...

陷入思考...

陷入思考...

陷入思考...

陷入思考...

陷入思考...

陷入思考...

参考答案:

function LazyMan(name) {
if(!(this instanceof LazyMan)){
return new LazyMan(name)
}
const cb = (next)=>{
console.log(`Hi This is ${name}!`)
next()
}
this.cbs = [cb];
setTimeout(()=>{
this.next()
},0)
}
LazyMan.prototype.eat = function (food){
const cb = (next)=>{
console.log(`Eat ${food}~`)
next()
}
this.cbs.push(cb);
return this
}
LazyMan.prototype.sleepFirst = function (time){
const cb = (next)=>{
setTimeout(()=>{
next()
},time*1000)
}
this.cbs.unshift(cb);
return this
}
LazyMan.prototype.sleep = function(time){
const cb = (next)=>{
setTimeout(()=>{
next()
},time*1000)
}
this.cbs.push(cb);
return this
}
LazyMan.prototype.next = function(){
if(this.cbs.length <= 0)return
const first = this.cbs.shift()
first(this.next.bind(this))
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值