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