Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 17.09.2015
Сообщений: 67

Введение в ООП

11.03.2020, 18:37. Показов 2167. Ответов 7

Студворк — интернет-сервис помощи студентам
Здравствуйте! Перешёл к интересному заданию. Ниже, я предоставлю само задание и свой код и попробую объяснить, что я делаю. Я очень прошу вас поправить меня там, где ошибусь и направить на дальнейшее решение:

Задание

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
Подсказки
Функции это объекты
Мой код:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 18:37
Ответы с готовыми решениями:

Введение логов
Ребят, посоветуйте с чего начать. Хочу с помощью JS автоматизировать историю -регестрации пользователяъ -зашел вышел с аккаута - и...

Нужно создать класс PHP (введение в ООП)
Создать класс, содержащий функцию работы со строкой (определение букв, входящих в строку более одного раза). Написать скрипт, который...

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

7
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
11.03.2020, 19:15
А вот здесь функциональное программирование в чистейшем виде, а не ООП.
0
1 / 1 / 0
Регистрация: 17.09.2015
Сообщений: 67
12.03.2020, 10:40  [ТС]
а в моём коде, какая ошибка? Что необходимо переделать?
P.S. только без классов пожалуйста!
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.03.2020, 13:20
Алексей-87, откуда у вас такое отвращение к ООП ? Нельзя же так.
Обычно тема ООП в наши дни воспринимается студентами спокойно и с чувством, что так и должно быть, и ничего уже не изменишь
0
1 / 1 / 0
Регистрация: 17.09.2015
Сообщений: 67
12.03.2020, 13:29  [ТС]
"откуда у вас такое отвращение к ООП ? " - если вы имеете ввиду мою просьбу не писать про классы, так я написал это только по тому, что решить её нужно без классов. Мы классы ещё не проходили. Всё просто)
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.03.2020, 13:39
Алексей-87, функция-конструктор, которую вы уже применяли, - это класс в синтаксисе ES5 образца 2012 года.
0
1 / 1 / 0
Регистрация: 17.09.2015
Сообщений: 67
12.03.2020, 14:23  [ТС]
а если убрать прототипы, как иначе(Кроме использование глобальной переменной) сохранять из вызова в вызов функции magic, второй параметр функции reduce?

Добавлено через 9 минут
Убрал prototype

JavaScript
1
2
3
4
const magic = (...arg) => {
   const arr = [...arg];
   
 const result = arr.reduce((total, nextEl) => total + nextEl, boxCounter); // как-то надо сохранять boxCounter
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
12.03.2020, 15:17
Цитата Сообщение от Алексей-87 Посмотреть сообщение
JavaScript
1
magic.prototype.getResult = function(){
Вам же дали подсказку
Цитата Сообщение от Алексей-87 Посмотреть сообщение
Функции это объекты
У вас функция, возвращает опять функцию. А как вы можете сравнить функцию с примитивом?
Цитата Сообщение от Алексей-87 Посмотреть сообщение
JavaScript
1
magic(5, 2, -8) == -1;
Использовать метод valueOf()
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const magic = function(...args) {
  let result = 0;
 
  const innerMagic = function innerMagic(...otherArgs) {
    result = [...otherArgs].reduce((sum, v) => sum + v, result);
 
    return innerMagic;
  }
 
  innerMagic.valueOf = function() {
    return result;
  }
 
  return innerMagic(...args);
};
 
console.log(magic() == 0); // true
console.log(magic(5, 2, -8) == -1); // true
console.log(magic(1, 2)(3, 4, 5)(6)(7, 10) == 38); // true
console.log(magic(4, 8, 1, -1, -8)(3)(-3)(7, 2) == 13); // true
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2020, 15:17
Помогаю со студенческими работами здесь

Введение
Всем добрый вечер. Начал осваивать столь замечательный программный продукт, как Wolfram Mathematica. Наткнулся на некоторые...

Введение в IT!
Доброго дня всем! Хотел бы попросить у вас совета. Хочу разобраться что такое IT в общем и каждая его часть (такая как например PHP или...

Введение параметра
Здравствуйте. Решал вот такое уравнение y' + y - x(y')^2=0 y'=p y=xp^2-p pdx = d(xp^2-p) pdx=p^2dx+2xpdp-dp А дальше возник...

Введение в Java
Доброго времени суток! Ребят, хочу изучать Java(цель - устройство на работу). По-тихоньку пытаюсь решать задачки на джава раш сайте ...

Введение формул
Проверте пожалуйста t1 = (((-1)/((a-b)*(a-b)))*(((1)/(a+x))+((1)/(1+x))))+(((2)/((a-b)*(a-b)*(a-b)))*(log((a+x)/(b+x)))); t2 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru