当前位置:首页 > JavaScript

js函数实现链式调用

2026-03-01 17:29:53JavaScript

js函数实现链式调用

链式调用的实现原理

链式调用(Method Chaining)的核心是让每个方法返回当前对象(this),使得后续方法可以继续在同一个对象上操作。这种模式常见于 jQuery、Lodash 等库中。

js函数实现链式调用

基础实现示例

function Calculator() {
  this.value = 0;

  this.add = function(num) {
    this.value += num;
    return this; // 返回当前对象
  };

  this.subtract = function(num) {
    this.value -= num;
    return this;
  };

  this.result = function() {
    return this.value;
  };
}

// 使用示例
const calc = new Calculator();
const result = calc.add(5).subtract(2).add(10).result();
console.log(result); // 输出: 13

类语法实现(ES6+)

class Calculator {
  constructor() {
    this.value = 0;
  }

  add(num) {
    this.value += num;
    return this;
  }

  subtract(num) {
    this.value -= num;
    return this;
  }

  get result() {
    return this.value;
  }
}

// 使用示例
const result = new Calculator().add(5).subtract(2).add(10).result;
console.log(result); // 输出: 13

支持异步操作的链式调用

通过返回 Promise 并保持链式结构:

class AsyncChain {
  constructor(value = 0) {
    this.value = value;
  }

  asyncAdd(num) {
    return new Promise((resolve) => {
      setTimeout(() => {
        this.value += num;
        resolve(this); // 返回当前对象
      }, 100);
    });
  }

  asyncSubtract(num) {
    return new Promise((resolve) => {
      setTimeout(() => {
        this.value -= num;
        resolve(this);
      }, 100);
    });
  }
}

// 使用示例
new AsyncChain()
  .asyncAdd(5)
  .then(instance => instance.asyncSubtract(2))
  .then(instance => instance.asyncAdd(10))
  .then(instance => console.log(instance.value)); // 输出: 13

链式调用的注意事项

  • 不可变数据:若需保持数据不可变性,应返回新对象而非修改原对象
  • 调试难度:长链式调用可能增加调试复杂度
  • 性能影响:频繁创建新对象可能影响性能(适用于不可变模式)

不可变链式示例

class ImmutableCalculator {
  constructor(value = 0) {
    this.value = value;
  }

  add(num) {
    return new ImmutableCalculator(this.value + num);
  }

  subtract(num) {
    return new ImmutableCalculator(this.value - num);
  }
}

// 使用示例
const result = new ImmutableCalculator()
  .add(5)
  .subtract(2)
  .add(10).value;
console.log(result); // 输出: 13

标签: 链式函数
分享给朋友:

相关文章

vue实现链式运动

vue实现链式运动

实现链式运动的思路 链式运动指的是多个动画按顺序依次执行,通常需要在前一个动画完成后触发下一个动画。Vue中可以通过结合CSS过渡、JavaScript动画库或自定义逻辑实现。 使用Vue过渡 +…

react函数组件如何更新

react函数组件如何更新

React 函数组件更新方法 使用 useState Hook 通过 useState Hook 可以定义组件的状态,并触发重新渲染。useState 返回一个状态值和一个更新状态的函数。调用更新函数…

react如何控制函数组件更新

react如何控制函数组件更新

控制函数组件更新的方法 在React中,函数组件的更新通常由状态(state)或属性(props)的变化触发。以下是几种常见的控制函数组件更新的方法: 使用React.memo进行浅比较 React…

react函数组件如何销毁组件

react函数组件如何销毁组件

在 React 函数组件中销毁组件 React 函数组件的销毁通常由 React 的声明式渲染机制自动处理。当组件从 DOM 中移除时,React 会自动清理其资源。以下是关键点: 触发组件…

react函数组件如何强制刷新

react函数组件如何强制刷新

强制刷新React函数组件的方法 在React函数组件中,强制刷新通常不推荐直接操作,因为React的设计理念是基于状态和props的自动更新。但在某些特殊情况下,可能需要手动触发更新。以下是几种常见…

react如何在model层写函数调接口

react如何在model层写函数调接口

React 中 Model 层函数调用接口的实现 在 React 应用中,Model 层通常负责数据管理和接口调用。可以通过以下方式组织代码: 创建独立的 API 服务模块 将接口调用封装在单独的…