ES6 представил поддержку классов (classes), которые представляют собой особый тип функций, однако вместо традиционного ключевого слова function
для объявления методов и свойств теперь используется новое ключевое слово — class
. Свойства объектов создаются и присваиваются внутри специального метода-конструктора constructor()
.
Простейший пример использования класса
Давайте рассмотрим простой класс Car, который представляет автомобильную марку:
// Определение класса Car
class Car {
// Метод конструктор получает аргумент 'name'
constructor(name) {
// Присваиваем свойство brand значению аргумента 'name' через ссылку 'this'
this.brand = name;
}
}
Несколько важных моментов:
- Имя класса начинается с заглавной буквы ("Car"). Такое написание является общепринятым соглашением JavaScript-сообщества для обозначения классов.
После определения класса можно создать объект данного типа с использованием оператора new
.
Создание экземпляра класса
Чтобы использовать созданный класс, создаем новый экземпляр автомобиля следующим образом:
// Создаём объект mycar на основе класса Car
const mycar = new Car('Ford');
Что происходит?
- Когда создаётся объект через оператор
new
, первым делом автоматически запускается метод-конструкторconstructor()
. - Внутри метода-конструктора переменная
this
ссылается на создаваемый объект, позволяя устанавливать его свойства и методы. - В нашем примере передаётся строка "Ford" в качестве значения параметра
name
, которое будет присвоено свойствуbrand
объекта.
Таким образом, после выполнения данного примера у нас будет объект с именем mycar
, содержащий одно поле — brand
, равное строке "Ford".
Результат работы приведённого выше кода выглядит так:
console.log(mycar); // Выведет { brand: 'Ford' }
Методы в классах JavaScript
JavaScript позволяет создавать классы, содержащие собственные методы. Метод — это функция, связанная с объектом определенного класса. Рассмотрим подробней процесс добавления методов в класс и работу с ними.
Добавление собственных методов в класс
Рассмотрим пример простого класса Car, который имеет один собственный метод:
// Создаем класс Car
class Car {
// Конструктор принимает аргумент и присваивает значение полю brand
constructor(name) {
this.brand = name;
}
// Собственный метод present(), возвращающий строку
present() {
return 'I have a ' + this.brand;
}
}
// Создание экземпляра класса Car
const mycar = new Car('Ford');
// Вызов метода через объект
console.log(mycar.present()); // Выводит: I have a Ford
Конструктор (constructor
) — специальный метод, автоматически запускаемый при создании нового объекта. Здесь происходит инициализация свойств объекта.
Методы класса объявляются непосредственно внутри тела класса и имеют доступ ко всем полям текущего объекта через оператор this
.
Для вызова метода используется следующий синтаксис:
- Ссылка на экземпляр объекта.
- Имя метода после точки.
- Скобки (если нужно передать параметры):
mycar.present();
Наследование классов
Наследование — важная концепция ООП, позволяющая одному классу унаследовать свойства и поведение другого класса. Для реализации наследования используется ключевое слово extends
:
// Родительский класс Car
class Car {
constructor(name) {
this.brand = name;
}
present() {
return 'I have a ' + this.brand;
}
}
// Класс-наследник Model
class Model extends Car { // Ключевое слово extends устанавливает связь между классами
constructor(name, mod) {
super(name); // Вызов конструктора родительского класса
this.model = mod; // Инициализируем собственное свойство model
}
show() {
return this.present() + ', it is a ' + this.model; // Используем метод родительского класса
}
}
// Экземпляр класса Model
const mycar = new Model('Ford', 'Mustang');
// Вызов метода дочернего класса
console.log(mycar.show()); // Выводит: I have a Ford, it is a Mustang
Что здесь важно отметить?
- Ключевое слово
super()
: оно вызывает конструктор родительского класса. Это позволяет использовать поля и методы базового класса. - Дочерний класс наследует все публичные методы и свойства родительского класса.
- Мы можем переопределять или расширять функциональность базовых методов в классе-потомке.
Таким образом, механизм наследования позволяет строить иерархию классов, где подклассы получают доступ к функциональности суперкласса и добавляют свою специфику.