当前位置:首页 > JavaScript

js实现 after

2026-01-31 21:32:03JavaScript

js实现 after

实现 after 方法

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

js实现 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!

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

标签: jsafter
分享给朋友:

相关文章

js实现跳转

js实现跳转

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

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…