如何在JavaScript中使用不同的参数调用相同的函数?

3
function partialize(){

}

function calculation(a,b,c){
  console.log(a*b/c);
  return a*b/c;
}

var a = 10, b= 20, c= 5;

var partialize1 = partialize(calculation, a);
partialize1(b,c)

var partialize2 = partialize(calculation, a, b);
partialize2(c)

var partialize3 = partialize(calculation, a, b, c);
partialize3()

我需要编写一个 partialize 函数,它在所有三种情况下都能给出相同的输出。

我尝试了这样做,它可以工作。但是我使用了扩展运算符。我们能否不使用扩展运算符来实现这个函数呢?

 function partialize(fn,...a) {
    console.log(...a);

    return function (...b) {
        console.log(...b);
        fn(...a,...b);

    }

}

function calculation(a, b, c) {
    console.log(a * b / c);
    return a * b / c;
}

var a = 10, b = 20, c = 5;

var partialize1 = partialize(calculation, a);
partialize1(b, c)

var partialize2 = partialize(calculation, a, b);
partialize2(c)

var partialize3 = partialize(calculation, a, b, c);
partialize3()

不使用扩展运算符,我们能否做同样的事情?

3个回答

3
您可以保存传递的初始arguments,并返回一个可以使用其余参数调用的函数,然后使用apply调用原始函数:

function partialize(fn) {
  const initialArguments = Array.from(arguments).slice(1);
  return function() {
    const finalArguments = Array.from(arguments);
    fn.apply(null, initialArguments.concat(finalArguments));
  }
}

function calculation(a, b, c) {
  console.log(a * b / c);
  return a * b / c;
}

var a = 10,
  b = 20,
  c = 5;

var partialize1 = partialize(calculation, a);
partialize1(b, c)

var partialize2 = partialize(calculation, a, b);
partialize2(c)

var partialize3 = partialize(calculation, a, b, c);
partialize3()


你能回答这个问题吗?https://stackoverflow.com/questions/50973462/how-to-get-response-synchronously-and-request-asynchronously/50973638#50973638 - user944513
pls also anser this question - user944513

1

你在回答上比我快了几秒钟。我不明白使用展开运算符有什么问题,但如果没有它,arguments 是唯一合理的选择。 - ajxs

0

user944513,在JavaScript中模拟方法重载,可以使用默认会在函数内部出现的arguments对象。为了更好地解释,我写了一段代码块。希望能对你有所帮助:

function suma(a = 0){

let resultado = 0;

console.log(arguments.length);

for(let i = 0; i < arguments.length; i++)
{

if(typeof(arguments[i] == "number")){
  resultado += arguments[i];
}
}
}

suma(1,2,3,4); // 10

suma(1,2); // 3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接