Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое класс в JS?
Класс в JavaScript — это синтаксический сахар для создания объектов и работы с прототипным наследованием. Это шаблон для создания объектов с методами и свойствами. Классы были введены в ES6 (2015) и значительно упростили объектно-ориентированный код.
Основной синтаксис
class User {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `Hello, my name is ${this.name}`;
}
birthday() {
this.age++;
}
}
const user = new User('Alice', 25);
console.log(user.greet()); // Hello, my name is Alice
user.birthday();
console.log(user.age); // 26
Ключевые концепции
1. Конструктор
Это специальный метод, который вызывается при создании нового объекта:
class Car {
constructor(brand, model) {
this.brand = brand;
this.model = model;
}
}
const car = new Car('Toyota', 'Camry');
2. Методы класса
class Calculator {
add(a, b) {
return a + b;
}
subtract(a, b) {
return a - b;
}
}
const calc = new Calculator();
console.log(calc.add(5, 3)); // 8
3. Наследование
Один класс может наследовать другой через ключевое слово extends:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a sound`;
}
}
class Dog extends Animal {
speak() {
return `${this.name} barks`;
}
}
const dog = new Dog('Rex');
console.log(dog.speak()); // Rex barks
4. Super() для обращения к родительскому классу
class Bird extends Animal {
constructor(name, canFly) {
super(name);
this.canFly = canFly;
}
speak() {
return super.speak() + ' - chirp!';
}
}
Модификаторы доступа
Public (по умолчанию)
class Account {
constructor(balance) {
this.balance = balance; // public
}
}
Private (с # префиксом)
class Account {
#pin = 1234; // private
constructor(balance) {
this.balance = balance;
}
verifyPin(pin) {
return pin === this.#pin;
}
}
const acc = new Account(1000);
console.log(acc.balance); // 1000 (ok)
console.log(acc.#pin); // Error: Private field
Static методы
class MathUtils {
static add(a, b) {
return a + b;
}
}
MathUtils.add(5, 3); // 8
Getters и Setters
class Rectangle {
constructor(width, height) {
this._width = width;
this._height = height;
}
get area() {
return this._width * this._height;
}
set width(value) {
if (value <= 0) throw new Error('Width must be positive');
this._width = value;
}
}
const rect = new Rectangle(10, 5);
console.log(rect.area); // 50
rect.width = 20;
Классы vs Функции-конструкторы
Старый способ (ES5):
function User(name) {
this.name = name;
}
User.prototype.greet = function() {
return `Hello, ${this.name}`;
};
Современный способ (ES6+):
class User {
constructor(name) {
this.name = name;
}
greet() {
return `Hello, ${this.name}`;
}
}
Резюме
- Класс — это шаблон для создания объектов
- Вводится через ключевое слово class
- Содержит конструктор, методы, свойства
- Поддерживает наследование через extends
- super() для вызова методов родителя
- Private поля с # для инкапсуляции
- Static методы относятся к самому классу
- Getters/Setters для контролируемого доступа
- Классы работают на прототипах под капотом
Похожие вопросы
- Что возвращает typeof?
- Что такое специфичность селекторов в CSS?
- Как работает await с непромисами?
- Зачем нужна семантическая верстка?
- Для чего используется замыкание?
- Как организовать миграцию с Vue на React с точки зрения команды и процессов?
- Что вернет метод values от Map?
- Как работает наследование CSS со вложенными элементами?
- Почему MobX подходит для небольших проектов?
- Какие методы массива не мутируют исходный массив?
- Почему часто спрашивают про замыкание?
- Какие плюсы и минусы Redux в React?
- Почему контент HTML отображается в браузере при отключенном JavaScript?
- Какие знаешь области видимости в JS?
- Готов ли ты
- Работал ли по спринтам на последнем месте работы
- Является ли скрипт внутри HTML макротаской?
- В чём разница между методами call, apply и bind?
- С помощью чего в CSS задаются стили?
- Как передается функция?