JenMorgan / js-learning

0 stars 0 forks source link

Создать расширяемый калькулятор #52

Open JenMorgan opened 3 years ago

JenMorgan commented 3 years ago

Создайте функцию конструктор Calculator, которая создаёт «расширяемые» объекты калькулятора.

Задание состоит из двух частей.

Во-первых, реализуйте метод calculate(str), который принимает строку типа "1 + 2" в формате «ЧИСЛО оператор ЧИСЛО» (разделено пробелами) и возвращает результат. Метод должен понимать плюс + и минус -.

Затем добавьте метод addMethod(name, func), который добавляет в калькулятор новые операции. Он принимает оператор name и функцию с двумя аргументами func(a,b), которая описывает его.

JenMorgan commented 3 years ago
function Calculator () {

    this.calculate = function (str) {
        let newArr = [];
        newArr = str.split(" ");
        if (newArr[1] === "+") {
            return (+newArr[0] + +newArr[2]);
        } else if (newArr[1] === "-") {
            return (+newArr[0] - +newArr[2]);
        }
        else {
            let name = newArr[1];
            let a = +newArr[0];
            let b = +newArr[2];
            return this[name](a, b);
        }
    };

    this.addMethod = function (name, func) {
        this[name] = func;
    };
}

let powerCalc = new Calculator;
powerCalc.addMethod("*", (a, b) => a * b);
powerCalc.addMethod("/", (a, b) => a / b);
powerCalc.addMethod("**", (a, b) => a ** b);
let result = powerCalc.calculate("2 * 3");
alert( result );
kartamyshev commented 3 years ago
function Calculator () {
  this.calculate = function (str) {
    const newArr = str.split(" ");
    const [a, operation, b] = newArr;
    if (operation === "+") {
      return (+a + +b);
    } else if (operation === "-") {
      return (+a - +b);
    } else {
      return this[operation](a, b);
    }
  };

  this.addMethod = function (name, func) {
    this[name] = func;
  };
}