当前位置:首页 > JavaScript

js实现lazyman

2026-04-06 16:04:46JavaScript

实现 LazyMan 的功能

LazyMan 是一个经典的 JavaScript 面试题,要求实现一个链式调用的延迟执行队列。核心功能是按顺序执行任务,支持 sleep 等延迟操作。

基本结构

创建一个 LazyMan 类,初始化时传入名称,并维护一个任务队列。任务队列中的函数会依次执行,支持同步和异步操作。

js实现lazyman

class LazyMan {
  constructor(name) {
    this.name = name;
    this.tasks = [];
    setTimeout(() => {
      this.next();
    }, 0);
  }

  next() {
    const task = this.tasks.shift();
    task && task();
  }

  sleep(time) {
    this.tasks.push(() => {
      setTimeout(() => {
        console.log(`Wake up after ${time} seconds`);
        this.next();
      }, time * 1000);
    });
    return this;
  }

  sleepFirst(time) {
    this.tasks.unshift(() => {
      setTimeout(() => {
        console.log(`Wake up after ${time} seconds`);
        this.next();
      }, time * 1000);
    });
    return this;
  }

  eat(food) {
    this.tasks.push(() => {
      console.log(`Eat ${food}`);
      this.next();
    });
    return this;
  }
}

function lazyMan(name) {
  return new LazyMan(name);
}

使用示例

lazyMan('Bob').eat('apple').sleep(3).eat('banana').sleepFirst(2);

输出顺序:

js实现lazyman

  1. 等待 2 秒
  2. 打印 "Wake up after 2 seconds"
  3. 打印 "Eat apple"
  4. 等待 3 秒
  5. 打印 "Wake up after 3 seconds"
  6. 打印 "Eat banana"

关键点解析

使用任务队列(this.tasks)存储所有待执行函数,通过 next 方法依次触发执行。setTimeout 确保初始化后异步开始执行任务。

sleep 和 sleepFirst 的区别在于任务插入队列的位置:sleep 插入到队列尾部,sleepFirst 插入到队列头部。

每个方法都返回 this 以实现链式调用。

标签: jslazyman
分享给朋友:

相关文章

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…