首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的Calculator.js

我的Calculator.js
EN

Code Review用户
提问于 2017-02-17 17:42:21
回答 1查看 157关注 0票数 3

基本计算器的JavaScript实现。寻找建设性的批评我的代码。提前感谢!

代码语言:javascript
复制
    window.onload = function() {

    // number button variable declarations

    var zeroButton = document.getElementById("zero");
    var oneButton = document.getElementById("one");
    var twoButton = document.getElementById("two");
    var threeButton = document.getElementById("three");
    var fourButton = document.getElementById("four");
    var fiveButton = document.getElementById("five");
    var sixButton = document.getElementById("six");
    var sevenButton = document.getElementById("seven");
    var eightButton = document.getElementById("eight");
    var nineButton = document.getElementById("nine");

    // operator button variable declarations

    var plusButton = document.getElementById("plus");
    var minusButton = document.getElementById("minus");
    var timesButton = document.getElementById("times");
    var dividedByButton = document.getElementById("divided_by");

    // action button variable declarations

    var clearButton = document.getElementById("clear");
    var enterButton = document.getElementById("enter");

    // display variable declarations

    var operatorDisplay = document.getElementById("operator_display");
    var resultDisplay = document.getElementById("result_display_value");

    // variable holds hidden number

    var hiddenNum = "";

    // number button function

    var numberFunction = function(numberButton) {
        numberButton.onclick = function(event) {
            resultDisplay.innerHTML += numberButton.innerHTML;
        }
    };

    // number function calls

    numberFunction(zeroButton);
    numberFunction(oneButton);
    numberFunction(twoButton);
    numberFunction(threeButton);
    numberFunction(fourButton);
    numberFunction(fiveButton);
    numberFunction(sixButton);
    numberFunction(sevenButton);
    numberFunction(eightButton);
    numberFunction(nineButton);

    // operations function

    var operations = function() {
        if (operatorDisplay.innerHTML === "+") {
            resultDisplay.innerHTML = parseInt(hiddenNum) + parseInt(resultDisplay.innerHTML);
        } else if (operatorDisplay.innerHTML === "-") {
            resultDisplay.innerHTML = parseInt(hiddenNum) - parseInt(resultDisplay.innerHTML);
        } else if (operatorDisplay.innerHTML === "*") {
            resultDisplay.innerHTML = parseInt(hiddenNum) * parseInt(resultDisplay.innerHTML);
        } else if (operatorDisplay.innerHTML === "/") {
            resultDisplay.innerHTML = parseInt(hiddenNum) / parseInt(resultDisplay.innerHTML);
        }
    };

    // operator button function

    var operatorFunction = function(operatorButton) {
        operatorButton.onclick = function(event) {
            if (resultDisplay.innerHTML !== "" && hiddenNum !== undefined) {
                operations();
            }
            hiddenNum = resultDisplay.innerHTML;
            resultDisplay.innerHTML = "";
            operatorDisplay.innerHTML = operatorButton.innerHTML;
        }
    };

    // operator function calls

    operatorFunction(plusButton);
    operatorFunction(minusButton);
    operatorFunction(timesButton);
    operatorFunction(dividedByButton);

    // clear function

    var clearFunction = function(button, display) {
        display.innerHTML = "";
    };

    // clear button

    clearButton.onclick = function(event) {
        clearFunction(clearButton, operatorDisplay);
        clearFunction(clearButton, resultDisplay);
        hiddenNum = "";
    }

    // enter button

    enterButton.onclick = function(event) {
        if (resultDisplay.innerHTML === "" && hiddenNum === "") {
            resultDisplay.innerHTML = "";
        } else if (resultDisplay.innerHTML === "") {
            if (operatorDisplay.innerHTML === "+") {
                resultDisplay.innerHTML = parseInt(hiddenNum) + parseInt(hiddenNum);
            } else if (operatorDisplay.innerHTML === "-") {
                resultDisplay.innerHTML = parseInt(hiddenNum) - parseInt(hiddenNum);
            } else if (operatorDisplay.innerHTML === "*") {
                resultDisplay.innerHTML = parseInt(hiddenNum) * parseInt(hiddenNum);
            } else if (operatorDisplay.innerHTML === "/") {
                resultDisplay.innerHTML = parseInt(hiddenNum) / parseInt(hiddenNum);
            }
        } else {
            operations();
        }
        clearFunction(enterButton, operatorDisplay);
    }

}
EN

回答 1

Code Review用户

回答已采纳

发布于 2017-02-17 20:04:14

我认为使用DOM元素作为数据存储是一种糟糕的设计选择。如果使用JS变量,那么代码中丑陋的.innerHTMLs的数量就会戏剧性地减少(另外,这是一个长时间的操作)。

例如:

代码语言:javascript
复制
var operations = function() {
    if (operator === "+") {
        result = parseInt(hiddenNum) + parseInt(result);
    } else if (operator === "-") {
        result = parseInt(hiddenNum) - parseInt(result);
    } else if (operator === "*") {
        result = parseInt(hiddenNum) * parseInt(result);
    } else if (operator === "/") {
        result = parseInt(hiddenNum) / parseInt(result);
    }
    resultDisplay.innerHTML = result;
};

其中resultoperator是全局变量。

其次,可以将数字按钮存储在数组中,并将它们命名为"button0“、"button1”等等。

代码语言:javascript
复制
var numButton = new Array(10)
for (i=0; i<10; i++) {
    numButton[i] = document.getElementById("button" + i);
    numButton[i].onclick = function(event) {
        // be careful with a scope of variable i here,
        // I dont sure it is a right variant
        result += i
        resultDisplay.innerHTML = result ;
    }
}
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/155617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档