JavaScript 中如何实现链式调用的函数?

作者站长头像
站长
· 阅读数 8
Sint(1,2).j(10) // 13

这样的函数怎么实现。

function Sint(a,b){
    this.val= a + b
}

Sint.prototype.j= function(e){
    return this.val + e
}

这样操作需要 new Sint(1,2) ,有什么办法可以实现直接 Sint(1,2).j(10) 输出结果吗?

回复
1个回答
avatar
test
2024-06-19

补充一个思路,直接打印没法做到直接输出值,但是可以利用参与计算时,底层会调用 Symbol.toPrimitive 所绑定的方法,是可以做到直接跟运算符号的

function Sum(...args) {
    this.value = args.reduce((a, b) => a + b, 0);

    return new Proxy(this, {
        get: function (target, prop) {
            if (prop === Symbol.toPrimitive) {
                return () => target.value;
            }

            return target[prop];
        }
    });
}

Sum.prototype.add = function (value) {
    this.value += value;
    return this;
}

使用示例

// 访问值
new Sum(1,2,3).add(4).add(5).value // 15
// 参与计算
new Sum(1,2,3).add(4).add(5) + 20 // 35
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容