鉴于我有一个名为sum
模块的函数从第三方模块Calculator
导入。这是我如何使用它:
Calculator.sum(1, 2) // returns 3
我不知道Calculator.sum
的实施情况。如果我想在执行Calculator.sum
之前修改传递给sum
的参数,以便不使用原始数字(1,2,3等),sum
将采用它们的平方怎么办?值(1,4,9等)?例如:
Calculator.sum(1, 2) // returns 5
Calculator.sum(2, 3) // returns 13
Calculator.sum(3, 4) // returns 25
注意:这只是我实际问题的一个示例,我实际上并不需要Calculator.sum
函数来计算平方和
答案 0 :(得分:2)
难道你不能将它存储在另一个名称下并覆盖它吗?
Calculator.sum_stored = Calculator.sum;
Calculator.sum = function(a,b){
return Calculator.sum_stored(Math.sqrt(a),Math.sqrt(b));
};
然后您可以根据需要致电Calculator.sum
。
答案 1 :(得分:1)
您可以使用额外的功能简单地修饰原始函数,然后使用您希望的任何值调用原始函数。
如果你打算做这样的事情,你应该真正定义一个不同的功能,例如calulator.squareAdd
。
// this is your library object
const Calculator = {
sum: (...args) => args.reduce((x, y) => x + y, 0)
}
console.log(
'before decoration',
Calculator.sum(1, 2)
)
// save a reference to the original function
const origSum = Calculator.sum
// decorate the sum function with your own function
Calculator.sum = function(...args) {
return origSum.apply(Calculator, args.map(x => Math.pow(x, 2)))
}
// call the decorated function
console.log(
'after decoration',
Calculator.sum(1, 2), // returns 5
Calculator.sum(2, 3), // returns 13
Calculator.sum(3, 4) // returns 25
)
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>
答案 2 :(得分:-1)
您可以像这样修改方法旁边的参数 - &gt;
Calculator.sum(a,b) {
return a*a + b*b;
}
如果你希望你的方法灵活,那么你可以传递第三个参数来识别需要对参数执行的操作。
Calculator.sum(a,b,'square'){
//use switch case here to return the correct result.
}