当前位置:首页 > JavaScript

js实现 after

2026-01-31 21:32:03JavaScript

js实现 after

实现 after 方法

在 JavaScript 中实现 after 方法可以用于在某个函数被调用指定次数后再执行另一个函数。以下是几种实现方式:

使用闭包和计数器

function after(times, func) {
  let count = 0;
  return function(...args) {
    count++;
    if (count >= times) {
      return func.apply(this, args);
    }
  };
}

// 示例用法
const sayHello = after(3, () => {
  console.log('Hello!');
});

sayHello(); // 无输出
sayHello(); // 无输出
sayHello(); // 输出: Hello!

使用 ES6 类和装饰器模式

class After {
  constructor(times, func) {
    this.times = times;
    this.func = func;
    this.count = 0;
  }

  execute(...args) {
    this.count++;
    if (this.count >= this.times) {
      return this.func.apply(this, args);
    }
  }
}

// 示例用法
const sayHi = new After(2, () => {
  console.log('Hi!');
});

sayHi.execute(); // 无输出
sayHi.execute(); // 输出: Hi!

使用 Promise 实现异步版本

function afterAsync(times, func) {
  let count = 0;
  return function(...args) {
    return new Promise((resolve) => {
      count++;
      if (count >= times) {
        resolve(func.apply(this, args));
      }
    });
  };
}

// 示例用法
const greet = afterAsync(2, () => {
  return 'Greetings!';
});

greet().then(console.log); // 无输出
greet().then(console.log); // 输出: Greetings!

实现 lodash 风格的 after

如果需要与 lodash 的 _.after 方法保持兼容,可以这样实现:

function lodashAfter(times, func) {
  if (typeof func !== 'function') {
    throw new TypeError('Expected a function');
  }
  times = Math.max(times, 0);
  return function(...args) {
    if (--times < 1) {
      return func.apply(this, args);
    }
  };
}

// 示例用法
const logDone = lodashAfter(3, () => {
  console.log('Done!');
});

logDone(); // 无输出
logDone(); // 无输出
logDone(); // 输出: Done!

这些实现方式可以根据具体需求选择使用,闭包版本是最简洁的通用实现。

js实现 after

标签: jsafter
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现轮播图

js实现轮播图

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

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…