Определение классов в JavaScript
Понятие класса
Класс представляет описание объекта, его состояния и поведения, а объект является конкретным воплощением или экземпляром класса.
В JavaScript класс – это разновидность функции.
Определение класса
Для определения класса используется ключевое слово class:
После слова class идет название класса, а затем в фигурных скобках определяется тело класса.
Создание объекта класса
После определения класса можно создать объекты класса с помощью конструктора:
class Person{}
const tom = new Person();
const bob = new Person();
Для создания объекта с помощью конструктора сначала ставится ключевое слово new. Затем идет вызов конструктора - по сути вызов функции по имени класса.
Поля и свойства класса
Для хранения данных или состояния объекта в классе используются поля и свойства.
class Person{
name;
age;
}
const tom = new Person();
tom.name = "Tom";
tom.age = 37;
alert(tom.name); // Tom
alert(tom.age); // 37
Поведение класса и его методы
Класс может иметь методы, которые определяют поведение объекта - действия, которые выполняет объект.
class Person{
name;
age;
move(place){
alert(`Go to ${place}`);
}
eat(){
alert("Eat apples");
}
}
const tom = new Person();
tom.move("Hospital"); // Go to Hospital
tom.move("Cinema"); // Go to Cinema
tom.eat(); // Eat apples
Обращение к полям и методам внутри класса. Слово this
Обращение к полям и методам внутри класса
class Person{
name;
age;
print(){
alert(`Name: ${this.name} Age: ${this.age}`);
}
}
const tom = new Person();
tom.name = "Tom";
tom.age = 37;
tom.print(); // Name: Tom Age: 37
const bob = new Person();
bob.name = "Bob";
bob.age = 41;
bob.print(); // Name: Bob Age: 41
Определение конструктора
Для создания объекта класса используется конструктор. Конструктор определяется с помощью метода с именем constructor.
class Person{
name;
age;
constructor(){
alert("Вызов конструктора");
}
print(){
alert(`Name: ${this.name} Age: ${this.age}`);
}
}
const tom = new Person(); // Вызов конструктора
const bob = new Person(); // Вызов конструктора
Определение конструктора
class Person{
name;
age;
constructor(personName, personAge){
this.name = personName;
this.age = personAge;
}
print(){
alert(`Name: ${this.name} Age: ${this.age}`);
}
}
const tom = new Person("Tom", 37);
tom.print(); // Name: Tom Age: 37
const bob = new Person("Bob", 41);
bob.print(); // Name: Bob Age: 41
Приватные поля
class Person{
#name;
#age;
constructor(name, age){
this.#name = name;
this.#age = age;
}
print(){
alert(`Name: ${this.#name} Age: ${this.#age}`);
}
}
const tom = new Person("Tom", 37);
// tom.#name = "Sam"; // ! Ошибка - нельзя обратиться к приватному полю
// tom.#age = -45; // ! Ошибка - нельзя обратиться к приватному полю
tom.print(); // Name: Tom Age: 37
Приватные методы
Статические поля
Статические методы
Статические методы определяются для всего класса в целом. Для их определения перед названием метода ставится оператор static.
Обращение к свойствам объекта в статическом методе
Нужно определить в методе параметр, через который в метод будет передаваться объект.
Наследование
Наследование
Наследование класса с конструктором
Определение конструктора в классе-наследнике и ключевое слово super
Производный класс может определить свой конструктор. Если производный класс определяет конструктор, то в нем должен быть вызван конструктор базового класса. Для обращения в производном классе к функциональности базового класса, в том числе для обращения к конструктору базового класса, применяется ключевое слово super.
Определение конструктора в классе-наследнике и ключевое слово super