Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-在执行函数之前修改参数_Javascript_Function_Arguments - Fatal编程技术网

JavaScript-在执行函数之前修改参数

JavaScript-在执行函数之前修改参数,javascript,function,arguments,Javascript,Function,Arguments,假设我有一个名为summodule的函数,该函数是从第三方模块Calculator导入的。以下是我如何使用它: Calculator.sum(1, 2) // returns 3 我不知道Calculator.sum的实现。如果我想在执行sum之前修改传递给Calculator.sum的参数,以便sum将取其平方值(1、4、9等),而不是取原始数字(1、2、3等),该怎么办?例如: Calculator.sum(1, 2) // returns 5 Calculator.sum(2, 3)

假设我有一个名为
sum
module的函数,该函数是从第三方模块
Calculator
导入的。以下是我如何使用它:

Calculator.sum(1, 2) // returns 3  
我不知道
Calculator.sum
的实现。如果我想在执行
sum
之前修改传递给
Calculator.sum
的参数,以便
sum
将取其平方值(1、4、9等),而不是取原始数字(1、2、3等),该怎么办?例如:

Calculator.sum(1, 2) // returns 5
Calculator.sum(2, 3) // returns 13
Calculator.sum(3, 4) // returns 25

注意:这只是我实际问题的一个例子,我实际上不需要
计算器。sum
函数用于计算平方和你能不能用另一个名称存储并覆盖它

Calculator.sum_stored = Calculator.sum;
Calculator.sum = function(a,b){
    return Calculator.sum_stored(Math.sqrt(a),Math.sqrt(b));
};

然后你可以随意调用
Calculator.sum

你就不能用另一个名称存储它并覆盖它吗

Calculator.sum_stored = Calculator.sum;
Calculator.sum = function(a,b){
    return Calculator.sum_stored(Math.sqrt(a),Math.sqrt(b));
};

然后您可以根据需要调用
Calculator.sum

您可以像这样修改方法中的参数->

Calculator.sum(a,b) {
return a*a + b*b;
}
如果希望方法灵活,则可以传递第三个参数,该参数将标识需要对参数执行的操作

Calculator.sum(a,b,'square'){
    //use switch case here to return the correct result.
}

您可以像这样修改方法中的参数->

Calculator.sum(a,b) {
return a*a + b*b;
}
如果希望方法灵活,则可以传递第三个参数,该参数将标识需要对参数执行的操作

Calculator.sum(a,b,'square'){
    //use switch case here to return the correct result.
}

您可以简单地使用额外的功能来装饰原始函数,然后使用您想要的任何值来调用原始函数

如果您打算这样做,您应该真正定义一个不同的函数,例如,
calulator.squareAdd

//这是您的库对象
常数计算器={
求和:(…args)=>args.reduce((x,y)=>x+y,0)
}
console.log(
“装修前”,
计算器。总和(1,2)
)
//保存对原始函数的引用
const origSum=Calculator.sum
//用你自己的函数装饰求和函数
Calculator.sum=函数(…args){
返回origSum.apply(Calculator,args.map(x=>Math.pow(x,2)))
}
//调用修饰函数
console.log(
“装修后”,
sum(1,2),//返回5
sum(2,3),//返回13
Calculator.sum(3,4)//返回25
)

您可以简单地用额外的功能来修饰原始函数,然后用您想要的任何值调用原始函数

如果您打算这样做,您应该真正定义一个不同的函数,例如,
calulator.squareAdd

//这是您的库对象
常数计算器={
求和:(…args)=>args.reduce((x,y)=>x+y,0)
}
console.log(
“装修前”,
计算器。总和(1,2)
)
//保存对原始函数的引用
const origSum=Calculator.sum
//用你自己的函数装饰求和函数
Calculator.sum=函数(…args){
返回origSum.apply(Calculator,args.map(x=>Math.pow(x,2)))
}
//调用修饰函数
console.log(
“装修后”,
sum(1,2),//返回5
sum(2,3),//返回13
Calculator.sum(3,4)//返回25
)

为什么要修改该方法,而不只是将修改后的值传递给它?它被称为
sum
。只需使用修改后的值调用该方法或为其创建一个新方法。
Math
“名称空间”具有实现该功能所需的所有函数。这只是我问题的一个例子。将修改后的值传递给它是很简单的,但是在我的实际函数中,我必须修改很多现有的单元测试方法,但是如果您的单元测试是针对<代码> >和>代码>方法,您期望实际上不使用代码>和<代码>,那么您要么为错误的版本创建了单元测试,要么需要考虑重新命名一些东西……如果您觉得需要,我建议在
计算器
对象中创建一个新方法,一个名称更好的方法,可以实现您的愿望。不将
sum
方法替换为非
sum
的方法:p您为什么要修改该方法,而不只是将修改后的值传递给它?它被称为
sum
。只需使用修改后的值调用该方法或为其创建一个新方法。
Math
“名称空间”具有实现该功能所需的所有函数。这只是我问题的一个例子。将修改后的值传递给它是很简单的,但是在我的实际函数中,我必须修改很多现有的单元测试方法,但是如果您的单元测试是针对<代码> >和>代码>方法,您期望实际上不使用代码>和<代码>,那么您要么为错误的版本创建了单元测试,要么需要考虑重新命名一些东西……如果您觉得需要,我建议在
计算器
对象中创建一个新方法,一个名称更好的方法,可以实现您的愿望。不要将
sum
方法替换为非
sum
:P