Цель работы
Изучить способы создания пользовательских объектов, познакомиться с правилами применения специальных операторов: delete, in, instanceof, typeof.
Задания
Задание 1
Создать пользовательский объект Gruppa (использовать пример, представленный выше). Добавить метод sub_stud (исключить из группы k студентов). Создать несколько экземпляров объекта Gruppa (gr2, gr3, gr4). Применить методы add_stud и sub_stud к каждому экземпляру. Вывести на страницу количество студентов в каждой группе.
Решение
Java Script
function Group(group_number, speciality, students_number){
    this.group_number = group_number
    this.speciality = speciality
    this.students_number = students_number
                              
    this.sub_student = function sub_student(count) { 
        this.students_number -= count
        if(count == 1)
            alert("Из группы " + this.group_number + " был исключен " 
                + count + " студент.")
        else
            alert("Из группы " + this.group_number + " было исключено " 
                + count + " студентов.")
    }
                                    
    this.add_student = function add_student(count) { 
        this.students_number += count
        if(count == 1)
            alert("В группу " + this.group_number + " был добавлен " 
                + count + " студент.")
        else
            alert("В группу " + this.group_number + " было добавлено " 
                + count + " студентов.")
    }
}
                          
let first_group = new Group(1, "Web Design", 30)
let second_group = new Group(2, "Software", 27)
let third_group = new Group(3, "Game Dev", 28)
                          
let first_start = first_group.students_number
let second_start = second_group.students_number
let third_start = third_group.students_number
                          
alert(first_group.speciality + ": " + first_group.group_number + "-я группа, " 
    + first_group.students_number + " студентов.\n" 
+ second_group.speciality + ": " + second_group.group_number + "-я группа, " 
    + second_group.students_number + " студентов.\n"
+ third_group.speciality + ": " + third_group.group_number + "-я группа, " 
    + third_group.students_number + " студентов.")
                          
let substract = prompt("Сколько студентов вы хотите исключить из группы " 
                    + first_group.group_number + "?", 0)
substract = Number.parseInt(substract)
first_group.sub_student(substract)
                          
let add = prompt("Сколько студентов вы хотите добавить в группу " 
                + second_group.group_number + "?", 0)
add = Number.parseInt(add)
second_group.add_student(add)
                          
add = prompt("Сколько студентов вы хотите добавить в группу " 
        + third_group.group_number + "?", 0)
add = Number.parseInt(add)
third_group.add_student(add)
                             
substract = prompt("Сколько студентов вы хотите исключить из группы " 
                    + third_group.group_number + "?", 0)
substract = Number.parseInt(substract)
third_group.sub_student(substract)
                          
alert("В " + first_group.group_number + "-й группе было " + first_start 
    + " студентов, стало " + first_group.students_number + '\n'
+ "В " + second_group.group_number + "-й группе было " + second_start 
    + " студентов, стало " + second_group.students_number + '\n'
+ "В " + third_group.group_number + "-й группе было " + third_start 
    + " студентов, стало " + third_group.students_number + '\n')
                            
Задание 2
Создать пользовательский объект Студент. Свойства: имя, фамилия, физика (оценка), математика, информатика. Методы: вывести свое имя и фамилию в окно, рассчитать средний балл и вывести на страницу. Создать 3 экземпляра объекта Студент. Вывести информацию о всех студентах. Добавить какое-нибудь свойство объекту Студент. Задать значение этого свойства для всех экземпляров. Вывести информацию о всех студентах на страницу.
Вместо объекта Студент можно придумать свой пример. Это приветствуется.
Решение
Java Script
function Student(m_name, m_secondName, m_physicsMark, 
    m_mathMark, m_compScienceMark){
    this.m_name = m_name
    this.m_secondName = m_secondName
    this.m_physicsMark = m_physicsMark
    this.m_mathMark = m_mathMark
    this.m_compScienceMark = m_compScienceMark
                            
    this.printName = (name, secondName) => {
        this.m_name = name
        this.m_secondName = secondName
        alert("Фамилия: " + this.m_secondName
            + "\nИмя: " + this.m_name)
    }
                            
    this.printGroup = group => {
        this.m_group = group
        alert("Группа: " + this.m_group)
    }
                            
    this.averageMark = (physicsMark, mathMark, compScienceMark) => {
        this.m_physicsMark = physicsMark
        this.m_mathMark = mathMark
        this.m_compScienceMark = compScienceMark
                            
        let average = ((this.m_physicsMark + this.m_mathMark + this.m_compScienceMark) / 3).toFixed(2)
                            
        alert("Средний балл: " + average)
    }
                            
    this.printAllInfo = (name, secondName, physicsMark, mathMark, compScienceMark, gr{
        this.m_name = name
        this.m_secondName = secondName
        this.m_physicsMark = physicsMark
        this.m_mathMark = mathMark
        this.m_compScienceMark = compScienceMark
            this.m_group = group
                            
        let average = ((this.m_physicsMarkm_mathMark + this.m_compScienceMartoFixed(2)
                            
        alert("Фамилия: " + this.m_secondName
        + "\nИмя: " + this.m_name
        + "\nГруппа: " + this.m_group
        + "\nСредний балл: " + average)
    }
}
                          
let student1  = new Student("Александр", "Добриян", 7, 4, 9)
                          
let student2  = new Student("Чеслав", "Линевич", 10, 10, 10)
   
Student.prototype.m_group = this.m_group

student1.m_group = 10
student2.m_group = 10
                          
student1.printName(student1.m_name, student1.m_secondName)
student1.printGroup(student1.m_group)
student1.averageMark(student1.m_physicsMark, student1.m_mathMark, 
        student1.m_compScienceMark)
                          
student2.printName(student2.m_name, student2.m_secondName)
student2.printGroup(student2.m_group)
student2.averageMark(student2.m_physicsMark, student2.m_mathMark, 
        student2.m_compScienceMark)
                          
student1.printAllInfo(student1.m_name, student1.m_secondName, 
        student1.m_physicsMark, student1.m_mathMark, student1.m_compScienceMark, student1.m_group)
student2.printAllInfo(student2.m_name, student2.m_secondName, 
        student2.m_physicsMark, student2.m_mathMark, student2.m_compScienceMark, student2.m_group)
Задание 3
Использовать объекты Math, Array и String из лабораторной работы № 3.
Delete. Удалить из массива элемент с номером 3, вывести исходный массив и полученный.
In. Проверить, имеется ли у массива 2-й элемент. Проверить наличие любого свойства у созданных ранее пользовательских объектов Gruppa и Студент.
Instanceof. Проверить, являются ли созданные объекты объектами Array, String, Object.
Typeof. Создать функцию, которая просто возвращает значение 5. Узнать тип всех созданных ранее объектов, включая функцию. Узнать тип всех свойств пользовательских объектов Gruppa и Студент.
Решение
Java Script
// оператор delete
alert("Исходный массив:\n" + arrayObj)
                             
delete arrayObj[2]
alert("Массив, после удаления 3-го элемента:\n" + arrayObj)
                                
// оператор in
2 in arrayObj ? alert("В массиве есть 3-й элемент.") : alert("В массиве нет 3-го элемента.")
                             
'm_name' in student1 ? alert("В объекте 'Student' есть свойство 'm_name'.") 
        : alert("В объекте 'Student' нет свойства 'm_name'.")
                             
'm_name' in first_group ? alert("В объекте 'Group' есть свойство 'm_name'.") 
        : alert("В объекте 'Group' нет свойства 'm_name'.")
                             
// оператор instanceof
let instanceText;
strObj instanceof String ? instanceText = "'strObj' является объектом String.\n" 
        : instanceText = "'strObj' не является объектом String.\n"
                             
arrayObj instanceof Array ? instanceText += "'arrayObj' является объектом Array.\n" 
        : instanceText += "'arrayObj' не является объектом Array.\n"
                             
student1 instanceof Student ? instanceText += "'student1' является объектом Student.\n" 
        : instanceText += "'student1' не является объектом Student.\n"
                             
alert(instanceText);
                             
// оператор typeof
const returnFive = () => 5
                             
alert("Тип обьекта, который возвращает число 5: " + typeof returnFive
    + "\nТип обьекта 'strObj': " + typeof strObj
    + "\nТип обьекта 'arrayObj': " + typeof arrayObj
    + "\nТип обьекта 'student1': " + typeof student1
    + "\nТип обьекта 'first_group': " + typeof first_group
    + "\nТип обьекта 'Group': " + typeof Group
    + "\nТип обьекта 'Student': " + typeof Student)
                             
alert("Объект Student:"
    + "\nТип свойства 'm_name': " + typeof student1.m_name
    + "\nТип свойства 'm_secondName': " + typeof student1.m_secondName
    + "\nТип свойства 'm_physicsMark': " + typeof student1.m_physicsMark
    + "\nТип свойства 'm_mathMark': " + typeof student1.m_mathMark
    + "\nТип свойства 'm_compScienceMark': " + typeof student1.m_compScienceMark
    + "\nТип свойства 'm_group': " + typeof student1.m_group)
   
alert("Объект Group:"
    + "\nТип свойства 'group_number': " + typeof first_group.group_number
    + "\nТип свойства 'speciality': " + typeof first_group.speciality
    + "\nТип свойства 'students_number': " + typeof first_group.students_number)