当前位置:首页 > JavaScript

js实现lazyman

2026-02-01 23:00:10JavaScript

实现 LazyMan

LazyMan 是一个经典的 JavaScript 面试题,要求实现一个链式调用的延迟执行队列。以下是一种实现方式:

js实现lazyman

class LazyMan {
  constructor(name) {
    this.name = name;
    this.tasks = [];
    console.log(`Hi I am ${this.name}`);
    setTimeout(() => {
      this.next();
    }, 0);
  }

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

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

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

  eat(food) {
    const fn = () => {
      console.log(`I am eating ${food}`);
      this.next();
    };
    this.tasks.push(fn);
    return this;
  }
}

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

使用示例

lazyMan('Tom').eat('lunch').sleep(2).eat('dinner').sleepFirst(3);

// 输出顺序:
// Hi I am Tom
// (等待3秒)
// Wake up after 3 seconds
// I am eating lunch
// (等待2秒)
// Wake up after 2 seconds
// I am eating dinner

实现原理

  1. 使用任务队列存储所有待执行的方法
  2. 通过 setTimeout 实现异步调用,确保链式调用完成后才开始执行
  3. sleepFirst 通过 unshift 方法将任务插入队列头部
  4. 每个任务完成后调用 next 方法触发下一个任务

注意事项

  1. 构造函数中使用 setTimeout 确保链式调用完成后再开始执行任务
  2. 每个方法返回 this 以实现链式调用
  3. 任务执行完成后必须调用 next 方法继续执行后续任务

这种实现方式利用了 JavaScript 的事件循环机制和队列数据结构,可以灵活地处理各种延迟执行的场景。

标签: jslazyman
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js jquery

js jquery

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

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…