Skip to content
文档章节

链式调用

在使用 JQueryMoment , Promise 時常见到链式调用的场景。本文介绍链式调用的技术方案。

常用方案

  1. 返回 this 作用域
  2. 返回对象本身
  3. 闭包返回对象

原型对象返回this作用域

函数原型对象中返回对象的 this 作用域

js
function Person() {}

Person.prototype.setName = function (name) {
  this.name = name;
  // 此时返回 this 作用域
  return this;
};

Person.prototype.setAge = function (age) {
  this.age = age;
  // 此时返回 this 作用域
  return this;
};

Person.prototype.getInfo = function () {
  return { name: this.name, age: this.age }
};

const person = new Person();

const userInfo = person.setName('得時').setAge(20).getInfo();
console.log({ userInfo });
// { userInfo: { name: '得時', age: 20 } }

返回对象本身

js
const person = {
  age: undefined,
  name: undefined,
  setName(name) {
    this.name = name;

    return this;
  },
  setAge(age) {
    this.age = age;
    return this;
  },

  getInfo() {
    return { name: this.name, age: this.age };
  },
};

const userInfo = person.setName('得時').setAge(20).getInfo();

console.log({ userInfo });
// { userInfo: 'name: 得時, age: 20' }

返回闭包对象

js
function queueChain(target) {
  // 此处第一次调用数据处理
  const queue = [target];

  function queueFn(chainTarget) {
    // 链式数据处理
    queue.push(chainTarget);

    return queueFn;
  }

  queueFn.get = () => queue;
  
  return queueFn;
}

const queue = queueChain(1)(2)(3).get();
console.log(queue);
// [ 1, 2, 3 ]

参考

  1. 腾讯云:JavaScript中的链式调用
  2. 掘金:JavaScript实现链式调用