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
函数,它在所有same
条件下给出three
输出。
我尝试过它可以工作。但是我使用了扩展运算符。我们可以不使用扩展运算符吗?
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对象的一些示例代码。 How can I convert the "arguments" object to an array in JavaScript?
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];
}
}
}
总和(1,2,3,4); // 10
sum(1,2)// 3