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

如何创建支持链式访问器的函数?含类结构调用示例

实现可链式调用的A.save.B()/A.save.C()结构

要实现你想要的调用方式其实很简单,核心是把save设置为A的属性(静态或实例属性),并让save的方法返回自身以支持链式调用。下面是几种具体的实现方案:

方式一:静态属性 + 对象字面量(最直接)

如果不需要实例化A就能访问save,可以把save设为A的静态属性,直接用对象字面量定义包含B()和C()的结构:

class A {
  // 静态属性,直接挂载在A类上
  static save = {
    B() {
      console.log("执行B方法");
      // 返回当前对象,支持链式调用
      return this;
    },
    C() {
      console.log("执行C方法");
      return this;
    }
  };
}

// 直接调用
A.save.B(); // 输出:执行B方法
A.save.C(); // 输出:执行C方法

// 链式调用
A.save.B().C(); // 先输出"执行B方法",再输出"执行C方法"

方式二:内部类实例作为静态属性

如果你原本想让save是A内部的类,可以把这个内部类的实例作为A的静态属性:

class A {
  static save = new class Save {
    B() {
      console.log("Save类的B方法执行");
      return this;
    }
    C() {
      console.log("Save类的C方法执行");
      return this;
    }
  }();
}

// 调用方式完全一致
A.save.B();
A.save.C();

方式三:实例属性版本

如果需要实例化A之后才能访问save,就把save放在类的构造函数里:

class A {
  constructor() {
    this.save = {
      B() {
        console.log("实例的B方法执行");
        return this;
      },
      C() {
        console.log("实例的C方法执行");
        return this;
      }
    };
  }
}

// 需要先实例化A
const a = new A();
a.save.B();
a.save.C();

关键要点

  • 链式调用的核心:每个方法末尾返回this(也就是当前的save对象/实例),这样调用完一个方法后,能继续调用另一个方法。
  • 静态vs实例属性:根据业务需求选择——如果save的功能和A的实例无关,用静态属性;如果需要和实例状态绑定,就用实例属性。

内容的提问来源于stack exchange,提问作者fadi mikael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:19:05