• Как понять решение задачи на JS?

    // просто функция проверяющая, является ли данное ей значение числом
    function isNumeric(n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    }
    
    // конструктор объектов типа Калькулятор, считай определение класса
    function Calculator() {
    
      // массив методов калькулятора, каждый из которых есть функция от двух чисел
      // виден только внутри объекта
      var methods = {
        "-": function(a, b) {
          return a - b;
        },
        "+": function(a, b) {
          return a + b;
        }
      };
    
      // публичный метод калькулятора, собственно его предназначение
      // принимает строку с выражением которое надо вычислить
      this.calculate = function(str) {
    
        // парсит строку с выражением
        // разбивая ее на 3 части по пробелам
        var split = str.split(' '),
          // создаются три переменные, два числа и операнд
          a = split[0],
          op = split[1],
          b = split[2]
    
        // валидация переменных
        if(!methods[op] || !isNumeric(a) || !isNumeric(b)) {
          return NaN;
        }
    
        // достается элемент массива methods под названием op
        // он является функцией
        // ей передаются оба числа и она с ними что-то делает
        // собственно результат ее выполнения возвращается из функции calculate
        return methods[op](+a, +b);
      }

    // еще один публичный метод калькулятора
    // принимает название функции и саму функцию
    // нужен, чтобы в массив methods можно было добавлять новые операции
    this.addMethod = function(name, func) {
    methods[name] = func;
    };
    }

    // создается новый объект класса Калькулятор
    var calc = new Calculator;

    // добавляется возможность умножать два числа, будет называться "*", объект функции прилагается
    calc.addMethod("*", function(a, b) {
    return a * b;
    });

    // аналогично, возможность делить одно число на другое
    calc.addMethod("/", function(a, b) {
    return a / b;
    });

    // аналогично, возведение в степень
    calc.addMethod("**", function(a, b) {
    return Math.pow(a, b);
    });

    // смотри описание this.calculate = function(str) {
    var result = calc.calculate("2 ** 3");
    alert(result); // 8
    Ответ написан
    4 комментария