Показать сообщение отдельно
  #1 (permalink)  
Старый 02.02.2016, 09:55
Интересующийся
Отправить личное сообщение для hbsv Посмотреть профиль Найти все сообщения от hbsv
 
Регистрация: 06.01.2016
Сообщений: 27

Код калькулятора с использованием методов
Здравствуйте!

Подскажите пожалуйста, по двум вопросам:

Имеется калькулятор:

<from id = 'calculator'>
    <table>
        <tr>
            <td>
                <div align="center">

                    <input id="screen" type="text" value="" size="16" class="display" readonly="readonly" />
                </div>
            </td>
        </tr>

<tr>
    <td class="buttons">
        <div align="center">

<input id="btn_1" type="button" value="1" />
<input id="btn_2" type="button" value="2" />
<input id="btn_3" type="button" value="3" />
<input id="add" type="button" value="+" class="operator" />
        </div>
        <div align="center">
<input id="btn_4" type="button" value="4" />
<input id="btn_5" type="button" value="5" />
<input id="btn_6" type="button" value="6" />
<input id="sub" type="button" value=" - " class="operator" />
        </div>
<input id="btn_7" type="button" value="7" />
<input id="btn_8" type="button" value="8" />
<input id="btn_9" type="button" value="9" />
<input id="mult" type="button" value=" * " class="operator" />
        <div align="center">
<input id="clr" type="button" value=" c " class="clear" />
<input id="btn_0" type="button" value="0" />
<input id="calculate" type="button" value="  =  " class="eval" />
<input id="div" type="button" value=" / " class="operator" />


        </div>
            </td>
        </tr>
    </table>
</from>



var a,b,c;
var action = '';

function getValue(id) {
    var res = document.getElementById(id).value - '';
    if (!isNaN(res))
        return res;
}

function PutNum(val) {
    document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;
}

function add () {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "+";
}

function sub() {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "-";
}

function mult() {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "*";
}

function div() {
    a = getValue("screen");
    document.getElementById("screen").value = 0;
    action = "/";
}

function clr() {
    document.getElementById("screen").value = 0;
}


function calculate() {
    b = getValue("screen");
    switch(action) {
        case "+":
            c = a + b;
            break;
        case "-":
            c = a - b;
            break;
        case "*":
            c = a * b;
            break;
        case "/":
            if (b == 0) {
                alert('Division durch Null kann nicht sein!');
            }
            else {
                c = a / b;
            }
            break;
    }
    document.getElementById("screen").value = c;
}

window.onload = function () {

    for (var i = 0; i < 10; i++) {
        (function (val) {
            document.getElementById("btn_" + val).onclick = function () {
                PutNum(val);
            }
        })(i);
    }
    document.getElementById("add").addEventListener("click", add);
    document.getElementById("calculate").addEventListener("click", calculate);
    document.getElementById("sub").addEventListener("click", sub);
    document.getElementById("mult").addEventListener("click", mult);
    document.getElementById("div").addEventListener("click", div);
    document.getElementById("clr").addEventListener("click", clr);
 }


1 -й Вопрос что делает функция:
function PutNum(val) {
    document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;


Как я понимаю: велью а + атрибут велью б и минус 0.
Можно ли как то проще написать или это вполне адекватно? ))
В исполнении 0 получается промежуточное значение, т.е. оператор, как его заменить на само значение оператора, чтоб вместо ноля в калькуляторе отображался + - / *. Пробовал заменить, но минус считает криво.

2-й Вопрос, что делает эта функция, для чего используется цикл:

window.onload = function () {

    for (var i = 0; i < 10; i++) {
        (function (val) {
            document.getElementById("btn_" + val).onclick = function () {
                PutNum(val);
            }
        })(i);
    }
    document.getElementById("add").addEventListener("click", add);
    document.getElementById("calculate").addEventListener("click", calculate);
    document.getElementById("sub").addEventListener("click", sub);
    document.getElementById("mult").addEventListener("click", mult);
    document.getElementById("div").addEventListener("click", div);
    document.getElementById("clr").addEventListener("click", clr);
 }


3 - й Вопрос, можно ли этот код допиписать с использованием методов:

function Calculator() {
    var methods = {
        "+" : function(a,b) {
            return a + b;
        },
        "-" : function(a,b) {
            return a - b;
        },
        "*" : function(a,b) {
            return a * b;
        },
        "/" : function(a,b) {
            return a / b;
        }
    }
}


Заранее очень Благодарен!
Ответить с цитированием