繁体   English   中英

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

[英]how to call same function with different parameter in javascript?

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函数,它在所有three条件下都给出same输出。

我尝试过它可以工作。但是我使用了扩展运算符。我们可以不使用扩展运算符吗?

 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()

没有传播运营商,我们可以做同样的事吗?

您可以保存传递的初始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() 

如果您的代码当前正在工作,但您想将其更改为不使用spread运算符,则可以使用arguments对象。

arguments对象: https//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

如果有用,请查看此stackoverflow问题以获取使用arguments对象的一些示例代码。 如何在JavaScript中将“arguments”对象转换为数组?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM