我能把四个功能合二为一吗?

时间:2014-01-22 23:26:53

标签: javascript add calculator subtraction

我不确定我是否正确写了这个,但基本上我写了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;
}

7 个答案:

答案 0 :(得分:6)

听起来你想要一个有条件地执行请求动作的通用功能。这样的事情应该有效:

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

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

答案 1 :(得分:1)

您可以重构所有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);

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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 :(得分:0)

由于这听起来像是家庭作业,我会给你一个功课答案。

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

例如:

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功能。

答案 5 :(得分:0)

如果为执行的操作添加其他参数,则应该能够执行此操作。也许是开关来做每个操作。

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
}

答案 6 :(得分:-1)

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);