【问题标题】:Could I put four functions into one?我可以把四个功能合二为一吗?
【发布时间】:2014-01-22 23:26:52
【问题描述】:

我不确定我的措辞是否正确,但基本上我已经写出了 4 个函数(我必须构建一个计算器),每个函数用于除法、加法、乘法和减法。有什么方法可以将所有这些“命令”添加到一个函数中,而不是使用四个单独的函数?

谢谢。

function add (num1, num2){
    var intOutput= parseInt(num1)+parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}

function subtract (num1, num2){
    var intOutput= parseInt(num1)-parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}

function multiply (num1, num2){
    var intOutput= parseInt(num1)*parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}


function divide (num1, num2){
    var intOutput= parseInt(num1)/parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}

【问题讨论】:

  • 你可以,但你为什么会呢?这是作业吗?
  • 您是指在一个函数中添加if 语句而不是将它们分开吗?
  • #trying 寻找一种更简单的方法,因为我计划在 javascript 文件中添加更多内容,并且希望所有内容尽可能短。
  • 为什么不使用 Javascript 中已有的数学函数?
  • 哦,谢谢@Anon,我会试试的!

标签: javascript add calculator subtraction


【解决方案1】:

听起来您想要一个有条件地执行请求操作的通用函数。这样的事情应该可以工作:

function calculate(num1, num2, action)
{
    if (action == 'add') {
        //...
    } else if (action == 'subtract') {
        //...
    } else if (action == 'multiply') {
        //...
    } else if (action == 'divide') {
        //...
    }
}

编辑:为了可读性和长期可维护性,您可能仍希望将实际操作保留在单独的函数中,并简单地从各种 if 分支调用这些操作。

【讨论】:

  • 完美!谢谢你。我会试一试的。
【解决方案2】:

你可以重构所有的 DOM 代码:

function proc(op, num1, num2) {
    document.getElementById("output").innerHTML = op(parseInt(num1), parseInt(num2));
}

然后使用这些简单的助手:

var addOp = function (a, b) { return a + b; };
var subOp = function (a, b) { return a - b; };
var multOp = function (a, b) { return a * b; };
var divOp = function (a, b) { return a / b; };

你可以做任何你想做的事情:

proc(addOp, num1, num2);
proc(subOp , num1, num2);
proc(multOp , num1, num2);
proc(divOp , num1, num2);

【讨论】:

    【解决方案3】:

    您可以使用函数变量抽象出常见行为:

    function calculateAndDisplay(num1, num2, operation) {
        var intOutput= operation(num1, num2);
        document.getElementById("output").innerHTML=intOutput;
    }
    
    function add(num1, num2) {
        calculateAndDisplay(num1, num2, function(a, b) { return a + b; });
    }
    
    ...
    

    【讨论】:

      【解决方案4】:
      function calculate(type, num1, num2) {
          var _in  = parseInt(num1, 10),
              _out = parseInt(num2, 20),
              output = 0;
      
          switch(type) {
              case 'add':
                  output = _in + _out;
                  break;
              case 'subtract':
                  output = _in - _out;
                  break;
              case 'multiply':
                  output = _in * _out;
                  break;
              case 'divide':
                  output = _in / _out;
                  break;
          }
      
          document.getElementById("output").innerHTML = output;
      }
      

      用作

      calculate('add', 10, 20); // 30
      calculate('multiply', 10, 20); // 200
      // etc...
      

      如果您确定字符串只是一个数字、运算符和数字,您可以使用 eval 来获得一些乐趣(尽管 eval 是邪恶的)

      function calculate(str) {
          if (/\d+(\*|\-|\+|\/)\d+/.test(str))
              document.getElementById("output").innerHTML = eval(str);
      }
      

      那你就可以了

      calculate('20*10')
      calculate('20+100')
      calculate('1000/100')
      

      FIDDLE

      【讨论】:

        【解决方案5】:

        因为这听起来像是家庭作业,所以我会给你一个家庭作业式的答案。

        你知道你可以从任何地方调用一个函数,包括另一个函数,所以完全有可能创建“一个函数来统治它们”。

        例如:

        function helloJohn() {
            console.log('Hello John');
        }
        
        function helloJane() {
            console.log('Hello Jane');
        }
        
        function hello(name) {
            if (name === 'John') {
                helloJohn();
            } else if (name === 'Jane') {
                helloJane();
            }
        }
        

        我可以轻松更改我的 hello 函数以包含 helloJohnhelloJane 功能。

        【讨论】:

          【解决方案6】:

          如果您为执行的操作添加另一个参数,您应该能够做到这一点。也许每个操作都需要一个开关。

          function operate(n1,n2,op){
              var output;    
              switch(op){
                  case 'add':
                      output = n1+n2;
                      break;
                  case 'sub':
                      output= n1-n2;
                      break;
                  case 'div':
                      output = n1/n2;
                      break;
                  case 'mul':
                      output = n1*n2;
          
              }
              document.getElementById('output').innerHtml = output
          }
          

          【讨论】:

            【解决方案7】:
            var Calculator = {
              add: function (num1, num2) {
                var intOutput= parseInt(num1)+parseInt(num2);
                document.getElementById("output").innerHTML=intOutput;
              },
              subtract: function (num1, num2) {
                var intOutput= parseInt(num1)-parseInt(num2);
                document.getElementById("output").innerHTML=intOutput;
              },
              multiply: function (num1, num2) {
                var intOutput= parseInt(num1)*parseInt(num2);
                document.getElementById("output").innerHTML=intOutput;
              },
              divide: function (num1, num2) {
                var intOutput= parseInt(num1)/parseInt(num2);
                document.getElementById("output").innerHTML=intOutput;
              }
            };
            
            Calculator.add(4, 5);
            Calculator.divide(20, 10);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-06-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-04-24
              • 2016-09-16
              • 1970-01-01
              相关资源
              最近更新 更多