Мы хотим инкапсулировать логику работы со студентами в объекты таким образом, чтобы мы могли создавать студентов, устанавливать им предмет, добавлять оценки, считать средний балл и отчислять.
Для этого:
-
Создайте функцию конструктор
Student(name, gender, age)
и с помощью оператораnew
несколько экземпляров объектов (студентов). -
Создайте доступный для всех экземпляров
student
методsetSubject(subjectName)
, который при вызове будет устанавливать поле предметsubject
экземпляра вsubjectName
. Для этого добавьте в свойствоStudent.prototype
функции конструктора функциюsetSubject
.
Student.prototype.setSubject = function (subjectName) {
//ваш код
}
- Создайте метод
addMark(mark)
по аналогии с п.2, который при вызове будет добавлять студенту оценкуmark
в свойство (массив)marks
объекта. Обратите внимание, что ранее мы нигде не задавали свойство marks для инстансов(экземпляров). Значит нам надо проверять, что свойство существует. Сделать это в методе можно следующим образом:
if(this.marks === undefined){
// добавить первую оценку
} else {
// добавить вторую и последующие оценки в массив
}
-
Создайте метод
addMarks(mark1,mark2,mark3...)
по аналогии с п.2, который при вызове будет добавлять студенту сразу несколько оценок. Подсказка: так как количество добавляемых оценок неизвестно, воспользуйтесь rest параметром. -
Создайте метод
getAverage()
по аналогии с п.2, который при вызове будет возвращать среднее арифметическое оценок студента. -
Создайте метод
exclude(reason)
по аналогии с п.2, который при вызове будет исключать студента из учебного процесса и устанавливать причину исключения. Для этого надо удалить свойстваsubject
иmarks
и добавить свойствоexcluded
со значениемreason
.
let student1 = new Student("Tony", "male", 37);
student1.setSubject("Algebra");
student1.addMark(5);
student1.addMark(4);
student1.addMark(5);
console.log(student1.getAverage()); // 4.666666666666667
console.log(student1);
// {age: 37, gender: "male", marks: [5, 4, 5], name: "Tony", subject: "Algebra"}
let student2 = new Student("Buzz", "female", 35);
student2.setSubject("Geometry");
student2.addMark(2);
student2.addMark(3);
student2.addMark(2);
student2.exclude('low grades')
console.log(student2)
// {name: "Buzz", gender: "female", age: 35, excluded: "low grades"}
- Произведите Fork репозитория с задачами (fork необходимо делать перед выполнением каждой домашней работы).
- Перейти в папку задания.
cd ./4.objects
. - Откройте файл
task.js
в вашем редакторе кода и выполнить задание. - Самостоятельно вызывать функции не требуется, если это не требуется по заданию.
- Откройте файл
index.html
в вашем браузере и с помощью консоли DevTools убедиться в правильности выводимых результатов. - Откройте файл
test-runer.html
в вашем браузере и убедитесь, что все тесты выполняются (на вкладке Spec List можно видеть какие тесты выполнились, а какие нет) - Добавить файл
task.js
в индекс git с помощью командыgit add %file-path%
, где %file-path% - путь до целевого файла.git add task.js
. - Сделать коммит используя команду
git commit -m '%comment%'
, где %comment% - это произвольный комментарий к вашему коммиту.git commit -m 'first commit variables'
. - Опубликовать код в репозиторий homeworks с помощью команды
git push -u origin main
. - Прислать ссылку на репозиторий через личный кабинет на сайте Нетологии.
Никаких файлов прикреплять не нужно.
Любые вопросы по решению задач задавайте в чате учебной группы.