Калькулятор не инициализирует read, при его вызове через функцию, как вызвать метод объекта при вызове функции?

введите сюда описание изображения

const createObjectCalculator = (initialA, initialB) => {
  let calculator = {
    read() {
      this.a = initialA;
      this.b = initialB;
    },

    sum() {
      return this.a + this.b;
    },

    mul() {
      return this.a * this.b;
    },
  };
  return calculator;
};


const calculator = createObjectCalculator(2, 3);
console.log(calculator.sum()); // NaN
console.log(calculator.mul()); // NaN
calculator.read(12, 34);
console.log(calculator.sum()); // 5
console.log(calculator.mul()); // 6


Ответы (1 шт):

Автор решения: Grundy

В данном коде две ошибки:

  1. неверное использование начальных значений initialA, initialB - в приведенном коде, эти значения устанавливаются не при инициализации объекта, а при вызове метода read. Вместо этого нужно было сразу записать их в соответствующие поля:

    const createObjectCalculator = (initialA, initialB) => {
        let calculator = {
            a: initialA,
            b: initialB,
    
  2. Судя по использованию, метод read должен принимать два параметра, однако реализация не принимает ни одного. Для решения достаточно использовать переданные параметры:

    read(a, b) {
        this.a = a;
        this.b = b;
    },
    

Пример:

const createObjectCalculator = (initialA, initialB) => {
  let calculator = {
    a: initialA,
    b: initialB,
    read(a, b) {
      this.a = a;
      this.b = b;
    },

    sum() {
      return this.a + this.b;
    },

    mul() {
      return this.a * this.b;
    },
  };
  return calculator;
};


const calculator = createObjectCalculator(2, 3);
console.log(calculator.sum()); // 5
console.log(calculator.mul()); // 6
calculator.read(12, 34);
console.log(calculator.sum()); // 46
console.log(calculator.mul()); // 408

→ Ссылка