Здравствуйте! Перешёл к интересному заданию. Ниже, я предоставлю само задание и свой код и попробую объяснить, что я делаю. Я очень прошу вас поправить меня там, где ошибусь и направить на дальнейшее решение:
Задание
magic.js
Реализуйте и экспортируйте по умолчанию функцию, которая работает следующим образом:
- Принимает на вход любое число аргументов и возвращает функцию, которая, в свою очередь, принимает на вход любое количество аргументов и так до бесконечности (привет, рекурсия ;)).
- Результат вызова этой функции при проверке на равенство должен быть равен сумме всех аргументов всех подфункций.
magic() == 0; // true
magic(5, 2, -8) == -1; // true
magic(1, 2)(3, 4, 5)(6)(7, 10) == 38; // true
magic(4, 8, 1, -1, -8)(3)(-3)(7, 2) == 13; // true
Подсказки
- Функции это объекты
Мой код:
const magic = (...arg) => {
const arr = [...arg];
magic.prototype.getResult = function(){
if(result != underfined){
return this.result;
}else{
return 0;
}
}
const result = arr.reduce((total, nextEl) => total + nextEl, magic.getResult);
magic.prototype.setResult = function(result){
this.result = result;
}
return make;
}
Как я понимаю решение этой задачи…
Как видно из теории, нам необходимо возвращать функцию с новыми параметрами и плюсовать их с уже имеющимся результатом от предыдущего вызова.
Для этого, я решил использовать reduce, который благодаря своему второму параметру(здесь это magic.getResult) позволяет начинать суммировать с этой суммы. То есть, если мы указываем второй параметр, то в параметр total попадает значение этого второго параметра reduce.
Прототипы, я хочу использовать для того, чтобы записывать и вытаскивать уже имеющуюся сумму, которая находится в result. Но здесь я понимаю, что использую их не правильно.
Во первых, не понимаю, можно ли их использовать внутри функции, в которую и записываешь прототип. Или их обязательно надо вытаскивать наружу?
Во вторых, можно ли использовать саму функцию для записи прототипа, да ещё и записывать и вытаскивать значение при помощи this Функция конечно объект, но правильно ли так делать?
В третьих, что возвращать из функции magic?