2014-01-22 56 views
0

我不知道我是否正確的措辭,但基本上我已經寫出了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; 
} 
+1

你可以,但你爲什麼?這是功課嗎? – Codeman

+0

你是指在一個函數中添加'if'語句而不是將它們分開? – Anonymous

+0

#正在尋找更簡單的方法,因爲我打算在javascript文件中添加更多內容,並且希望儘可能縮短所有內容。 – user3209878

回答

6

這聽起來像你想要一個一般的功能,將有條件地執行請求的操作。像這樣的東西應該工作:

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

編輯:爲了提高可讀性和長期可維護性的緣故,你可能仍想保留的實際行動,在不同的功能,並簡單地調用這些來自不同if分支機構。

+0

完美!謝謝。我會放棄這一點。 – user3209878

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

因爲這聽起來像功課,我會給你一個家庭作業, swer。

你知道你可以從任何地方調用一個函數,包括另一個函數,所以完全可以創建「一個函數來統一它們。」

例如:

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

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

如果您確保該字符串是隻是一個數字運算符和一個數字,你可以使用eval一些有趣的(全部雖然EVAL是邪惡的)

用作

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

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

然後,你可以只是做

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

FIDDLE

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

... 
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 
} 
相關問題