链式编程_[JS 编程] 讲一道关于懒汉的面试题

本文介绍了一道面试题,要求实现一个懒汉模式,支持链式调用和延迟执行。通过分析,文章讲解了如何利用事件循环和队列维护调度顺序,最后给出了代码实现和测试效果。
摘要由CSDN通过智能技术生成

前言

昨天晚上在一个技术群里面看到一些小伙伴在讨论这么一道有趣的题目,题目大致意思就是实现一个懒汉,并且提供一系列的行为方法,调用 eat 就打印吃饭信息,调用 sleep 方法则进行延迟传入时间,再进行下一步的操作。

当然,限制条件是不使用 Promise。

实现一个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
以此类推。

题目分析

链式调用

LazyMan(“Hank”).sleepFirst(5).eat(“supper”) 可以看出,每一个方法结尾都可以通过 . 来注册或执行下一步,第一直觉就想到了返回 this

sleep 延迟

如何通过 sleep 方法延迟后续方法的执行呢?可以使用 setTimeout 。那么问题又来了, setTimeout 能够通知宿主浏览器在一定时间再把我们的方法推进事件队列中,但我们无法阻碍下一步方法的调用。能够这么想,说明我们把链式调用想象为马上执行了。就好像是这样:

// 错误的代码
sleep (timeo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值