js如何实现参数链式调用,比如这样fn(a)(b)(c)...

clipboard.png

通过代码如下:

function functionFunction(str1) {
    return function(str2) {
           return str1 + ', ' + str2;    
    }
}

这道题只是了传入两个参数,但是如果要实现这样呢

functionFunction('a')('b')('b')('d')...

//打印出a, b, c, d....

常规的链式调用都是形如fn.a().b().c()... 这种形式
不知道该如何实现functionFunction('a')('b')('b')('d')...这种形式?

阅读 4.5k
3 个回答
const functionFunction = (s) => {
  const func = (str) => {
    s += ',' + str;
    return func;
  }
  func.toString = func.valueOf = () => s;
  return func;
}

alert(functionFunction(2)(3)(4)) // 2,3,4

这是函数式编程的内容,你可以了解下
假如有fn1 到fn10十个函数
用一个公用函数fn(fn1到10)里面循环return所有参数函数,实现特定的顺序调用

手机打字,先这样


上面回答是不同函数的顺序调用(合成和柯里化),没看清题目

楼上楼下正解
题主描述的两者都是所谓的'链式调用',只是一个返回对象 一个返回函数。。。

function functionFunction(str) {
    var r = str;

    var fn = function(str){
        r += ',' + str;
        return fn;
    }
    fn.toString = function(){return r}
    return fn;
}

// fn 还是返回一个函数, 但是添加一个toString让fn的结果即是一个函数同样也可以隐式转换为字符串。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题