如何创建支持链式访问器的函数?含类结构调用示例
实现可链式调用的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
相关产品推荐
相关产品推荐

