You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现one().plus().two().equalTo()这类链式调用等式求解器

实现支持链式调用的数学运算函数

要实现one().plus().two().equalTo()这类链式调用的运算,核心是让每个函数返回一个包含后续所需方法的对象——你之前的one()直接返回基本类型1,自然没法调用plus()方法。

实现思路

  1. 设计一个核心类维护当前计算值和待执行的操作(加/减);
  2. 数字方法(one()/two())返回类实例,同时完成数值设置或运算执行;
  3. 操作方法(plus()/minus())标记要执行的运算类型,返回实例以支持链式调用;
  4. equalTo()返回最终计算结果。

完整代码实现

class Calculator {
  constructor() {
    this.currentValue = 0;
    this.pendingOperation = null; // 存储待执行的运算类型
  }

  // 数字方法:处理初始值或执行pending运算
  one() {
    this._processNumber(1);
    return this;
  }

  two() {
    this._processNumber(2);
    return this;
  }

  // 扩展更多数字方法(three()/four()等)同理
  three() {
    this._processNumber(3);
    return this;
  }

  // 运算方法:标记待执行的操作
  plus() {
    this.pendingOperation = 'add';
    return this;
  }

  minus() {
    this.pendingOperation = 'subtract';
    return this;
  }

  // 辅助方法:执行pending运算或设置初始值
  _processNumber(num) {
    if (this.pendingOperation) {
      switch(this.pendingOperation) {
        case 'add':
          this.currentValue += num;
          break;
        case 'subtract':
          this.currentValue -= num;
          break;
      }
      this.pendingOperation = null; // 运算完成后清空标记
    } else {
      this.currentValue = num; // 初始状态直接赋值
    }
  }

  // 返回最终结果
  equalTo() {
    return this.currentValue;
  }
}

// 全局数字函数,返回Calculator实例并初始化数值
function one() {
  return new Calculator().one();
}

function two() {
  return new Calculator().two();
}

function three() {
  return new Calculator().three();
}

// 测试用例
console.log(one().plus().two().equalTo()); // 输出3
console.log(three().minus().one().equalTo()); // 输出2

关键细节说明

  • 链式调用的核心:每个方法(one()/plus()等)都返回this(Calculator实例),这样就能连续调用实例上的其他方法;
  • 运算执行时机:当调用下一个数字方法时,才会执行之前标记的运算(比如plus()后调用two(),才会把1和2相加);
  • 扩展性:要添加更多数字(如five())或运算(如multiply()),只需在Calculator类中新增对应方法即可。

内容的提问来源于stack exchange,提问作者Tej doshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:07:42