当前位置:首页 > 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实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现预览

js实现预览

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

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…