中心思想是在函数的结尾 return this; .

场景:实现一个可以实现简单的加减乘除的类,可以通过链式调用的方式进行加减乘除,最终返回最后的结果。

基础版

class MyMath {
    constructor(num) {
        this.num = num;
    }

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

    sub(num) {
        this.num -= num;
        return this;
    }

    mul(num) {
        this.num *= num;
        return this;
    }

    div(num) {
        this.num /= num;
        return this;
    }
}

const result = new MyMath(2).add(5).mul(2).sub(7);
console.log(result);   // {num: 7}

在上面的demo中,我们可以通过 return this; 来完成链式调用。

但是上面的demo有一点缺陷,因为最终返回的还不是我们的想要的结果,所以还需要添加一个用于导出最后结果的方法。

加强版

这里我添加了一个 run 方法,用于导出最后的结果。

class MyMath {
    constructor(num) {
        this.num = num;
    }

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

    sub(num) {
        this.num -= num;
        return this;
    }

    mul(num) {
        this.num *= num;
        return this;
    }

    div(num) {
        this.num /= num;
        return this;
    }

    run() {
        return this.num;
    }
}

const result = new MyMath(2).add(5).mul(2).sub(7).run();
console.log(result);  // 7

我是尾巴

在实际业务场景中,链式调用常见于 Promise 。那么想象一下, Promise 的链式调用是如何实现的呢?