Мы хотим инкапсулировать логику работы со студентами в объекты так, чтобы могли создавать студентов, устанавливать им предмет, добавлять оценки, считать средний балл и отчислять.
-
Создайте функцию-конструктор
Student(name, gender, age)и с помощью оператораnewнесколько экземпляров объектов (студентов). Все аргументы функции-конструктора сохраните в соответствующие свойства и добавьте свойствоmarksсо значением пустого массива. Позже в этот массив будут добавляться оценки. -
Создайте доступный для всех экземпляров
studentметодsetSubject(subjectName), который при вызове будет устанавливать поле предметsubjectэкземпляра вsubjectName. Для этого добавьте в свойствоStudent.prototypeфункции-конструктора функциюsetSubject.
Student.prototype.setSubject = function (subjectName) {
//ваш код
}- Создайте метод
addMarks(...marksToAdd)по аналогии с п. 2, который при вызове будет добавлять студенту сразу несколько оценок. Перед добавлением оценок добавьте проверку существования свойстваmarks, в котором хранятся оценки. Если пользователь отчислен, то у него не будет массива оценок, а, значит, и добавление будет невозможным.
Подсказка: так как количество добавляемых оценок неизвестно, используйте rest-параметр.
-
Создайте метод
getAverage()по аналогии с п. 2, который при вызове будет возвращать среднее арифметическое оценок студента. Добавьте проверку наличия оценок у студента. Если свойстваmarksне существует или оно пустое, сразу возвращайте ноль. -
Создайте метод
exclude(reason)по аналогии с п. 2, который при вызове будет исключать студента из учебного процесса и устанавливать причину исключения. Для этого надо удалить свойстваsubjectиmarksи добавить свойствоexcludedсо значениемreason.
let student1 = new Student("Василиса", "женский", 19);
student1.setSubject("Algebra");
console.log(student1.getAverage()); // 0
student1.addMarks(4, 5, 4, 5);
console.log(student1.getAverage()); // 4.5
console.log(student1);
// {age: 19, gender: "женский", marks: [4, 5, 4, 5], name: "Василиса", subject: "Algebra"}
let student2 = new Student("Артём", "мужской", 25);
student2.setSubject("Geometry");
student2.exclude('плохая учёба')
console.log(student2)
// {name: "Артём", gender: "мужской", age: 25, excluded: "плохая учёба"}- Все тесты успешно выполняются.
- Соблюдается кодстайл.
- Решение загружено в форкнутый репозиторий GitHub.
- Решение опубликовано в GitHub Pages.
- Откройте файл
task.jsв вашем редакторе кода и выполните задание. - Проверьте соблюдение кодстайла. Форматируйте ваш код через форматтер https://codebeautify.org/jsviewer.
- Добавьте файл
task.jsв индексgitс помощью командыgit add %file-path%, где%file-path%— путь до целевого файлаgit add ./4.objects/task.js. - Сделайте коммит, используя команду
git commit -m '%comment%', где%comment%— это произвольный комментарий к вашему коммитуgit commit -m 'Четвёртое задание полностью готово'. - Опубликуйте код в репозиторий
homeworksс помощью командыgit push -u origin main. - На проверку пришлите 2 ссылки. На файл с решением (
task.js) и на страницу GitHub Pages — страницу с автотестами:https://%USERNAME%.github.io/bjs-2-homeworks/4.objects.
Никакие файлы прикреплять не нужно.
Все задачи обязательны к выполнению для получения зачета. Присылать на проверку можно каждую задачу по отдельности или все задачи вместе. Во время проверки по частям ваша домашняя работа будет со статусом "На доработке".
Любые вопросы по решению задач задавайте в чате учебной группы.
