JavaScript - 在执行函数

时间:2017-12-11 08:21:16

标签: javascript function arguments

鉴于我有一个名为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函数来计算平方和

3 个答案:

答案 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.
}