В JavaScript класс — это схема или шаблон для создания объектов, тогда как объект — это экземпляр класса.
До появления синтаксиса класса ES6 (ECMAScript 2015) в JavaScript использовалось наследование на основе прототипов. Благодаря синтаксису классов ES6 JavaScript теперь имеет модель наследования на основе классов, аналогичную другим объектно-ориентированным языкам программирования, таким как Java или Python.
Объявление и выражение класса:
const Rectangle = class { constructor(height, width) { this.height = height; this.width = width; } get area() { return this.height * this.width; } };
В этом примере мы определяем класс Rectangle
с помощью выражения класса. Этот класс имеет метод constructor
, который устанавливает свойства height
и width
объекта, и метод доступа get
, который вычисляет площадь прямоугольника.
Метод конструктора:
Метод constructor
— это специальный метод, который вызывается при создании объекта на основе класса. Он используется для инициализации свойств объекта. Вот пример:
class Circle { constructor(radius) { this.radius = radius; } get area() { return Math.PI * this.radius ** 2; } } const myCircle = new Circle(5); console.log(myCircle.area); // Output: 78.53981633974483
В этом примере мы определяем класс Circle
с методом constructor
, который устанавливает свойство radius
объекта. Затем мы создаем новый объект myCircle
на основе этого класса и вычисляем его площадь с помощью аксессора area
.
Статические методы:
Статические методы — это методы, которые вызываются в самом классе, а не в экземпляре класса. Они полезны для определения служебных функций или методов, которым не требуется доступ к свойствам объекта. Вот пример:
class MathUtils { static add(x, y) { return x + y; } static multiply(x, y) { return x * y; } } console.log(MathUtils.add(2, 3)); // Output: 5 console.log(MathUtils.multiply(2, 3)); // Output: 6
В этом примере мы определяем класс MathUtils
с двумя статическими методами add
и multiply
. Затем мы вызываем эти методы для самого класса, а не для экземпляра класса.
Наследование:
JavaScript также поддерживает наследование между классами с помощью ключевого слова extends
. Это позволяет вам создать подкласс, который наследует свойства и методы от родительского класса. Вот пример:
class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} makes a noise.`); } } class Dog extends Animal { speak() { console.log(`${this.name} barks.`); } } const myDog = new Dog('Rover'); myDog.speak(); // Output: "Rover barks."
В этом примере мы определяем класс Animal
с методом constructor
и методом speak
. Затем мы определяем класс Dog
, который расширяет класс Animal
и переопределяет метод speak
. Мы создаем новый объект myDog
на основе класса Dog
и вызываем его метод speak
.
Это всего лишь несколько примеров особенностей и возможностей классов в JavaScript. Классы предоставляют мощный и гибкий способ создания объектов с повторно используемым кодом и четкой иерархией наследования.