#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. Окончательное редактирование, я думаю, что теперь это должно сработать. Не могли бы вы попробовать, пожалуйста?