Calc (добавить, добавить, результат)

#javascript #class

Вопрос:

Мне нужна ваша помощь, друзья мои.

Есть задача:

Реализуйте класс Calc с помощью методов sub / add / result.

В конструкторе мы можем передать начальное неизменяемое значение (по умолчанию 0), затем добавить и вычесть из него, используя методы add и sub. Вызов add / sub может быть последовательным (интерфейс fluent), методы возвращают новый объект класса. Позвонив result () , мы получаем результат вычислений.

Например:

 const calc = new Calc(); calc.result(); // 0 calc.add(5).result(); // 0   5 = 5 calc.add(3).sub(10).result(); // 0   3 - 10 = -7  const ten = calc.add(10); ten.sub(5).result(); // 10 - 5 = 5 ten.result(); // 10  

Это класс

 class Calc {   }  

Моя попытка:

 class Calc {  constructor (num = 0) {  this.num = num;  }   add (a) {  this.num  = a  return this  }   sub (a) {  this.num -= a  return this  }   result () {  return this.num  } }  

Тест показывает это:

 FAIL test.js  calc  ✓ must return an instance of the Calc class in sub methods (5ms)  ✓ must implement fluent interface (1ms)  ✓ must correctly implement mathematical operations (5ms)  ✕ must ensure the immutability of class instances (2ms)  ✕ must ensure the immutability of class 2 instances (2ms)  

Помогите мне правильно выполнить задание, пожалуйста

Комментарии:

1. Как это может calc.result(10); // 0 и ten.result(); // 10 возможно?

2. Последний ten.result(); должен выводить 0

3. @decpk, потому что перед этим есть строка const ten = calc.add (10);

4. После этой строки также есть утверждение ten.sub(5).result(); // 10 - 5 = 5

5. calc.add(3).sub(10).result(); // 0 3 - 10 = -7 — это также неверный результат — нет, если вы уже манипулируете num значением вашего единственного экземпляра Calc с помощью других операций перед этой строкой. Вы звонили calc.add(5) раньше, так num что теперь свойство содержит 5 . И 5 3 - 10 есть -2 , нет -7 .

Ответ №1:

Я предполагаю, что вам нужно возвращать новый экземпляр калькулятора каждый раз, когда вы выполняете операцию:

 class Calc {  constructor(num = 0) {  this.num = num;  }   add(a) {  return new Calc(this.num a);  }   sub(a) {  return new Calc(this.num-a);  }   result() {  return this.num;  } }  

Комментарии:

1. нет, это не сработало

2. Я неправильно ввел «число» в «число». Теперь все правильно. Не могли бы вы повторить еще раз?

3. ✕ must ensure the immutability of class instances (6ms) ✕ must ensure the immutability of class 2 instances (2ms)

4. те же ошибки остались

5. Окончательное редактирование, я думаю, что теперь это должно сработать. Не могли бы вы попробовать, пожалуйста?