Организация классов в модули
Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 30 из 56.
Когда ваш проект растет, хранение всех классов в одном файле создает беспорядок. Представьте 10 классов в одном файле — становится трудно находить и поддерживать код.
Мы уже узнали, как организовывать код с помощью модулей — экспорта и импорта функций и переменных. С классами та же логика и синтаксис! Вы можете экспортировать классы из одного файла и импортировать их в другой, точно так же, как мы делали с функциями.
Давайте попрактикуемся в организации классов в модули, чтобы наш код оставался чистым и управляемым.
Например:

Как это работает:
Файл 1: furniture-base.js (Экспорт базового класса)
export class Furniture {
constructor(material) {
this.material = material;
}
describe() {
return `${this.material} furniture`;
}
}Файл 2: chair.js (Импорт и расширение)
import { Furniture } from './furniture-base.js';
export class Chair extends Furniture {
constructor(material, legs) {
super(material);
this.legs = legs;
}
sit() {
return "Sitting comfortably";
}
}Файл 3: main.js (Используйте всё вместе)
import { Chair } from './chair.js';
import { Table } from './table.js';
const myChair = new Chair("wood", 4);
const myTable = new Table("glass", "round");
console.log(myChair.describe()); // "wood furniture"
console.log(myTable.describe()); // "glass furniture"Задание
У вас есть система магазина электроники, организованная в виде модулей. Классы Laptop и Smartphone созданы в отдельных файлах, но их необходимо сделать доступными для других файлов.
Ваша задача:
- Экспортируйте классы (используйте именованный экспорт — не default):
- В
laptop.js: Добавьтеexport, чтобы сделать классLaptopдоступным - В
smartphone.js: Добавьтеexport, чтобы сделать классSmartphoneдоступным
- В
- Импортируйте классы в
main.js:- Импортируйте класс
Laptopизlaptop.js - Импортируйте класс
Smartphoneизsmartphone.js
- Импортируйте класс
Шпаргалка
Классы можно экспортировать и импортировать между модулями, используя тот же синтаксис, что и для функций и переменных.
Экспорт класса:
export class Furniture {
constructor(material) {
this.material = material;
}
describe() {
return `${this.material} furniture`;
}
}Импорт и расширение класса:
import { Furniture } from './furniture-base.js';
export class Chair extends Furniture {
constructor(material, legs) {
super(material);
this.legs = legs;
}
sit() {
return "Sitting comfortably";
}
}Импорт нескольких классов:
import { Chair } from './chair.js';
import { Table } from './table.js';
const myChair = new Chair("wood", 4);
const myTable = new Table("glass", "round");Попробуйте сами
// TODO: Импортируйте класс Laptop из laptop.js
// TODO: Импортируйте класс Smartphone из smartphone.js
const myLaptop = new Laptop();
const myPhone = new Smartphone();
console.log(myLaptop.type); // Выводит: "laptop"
console.log(myPhone.type); // Выводит: "smartphone"В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Объекты и ключевое слово this
Краткий обзор: ОбъектыДобавление методов в объектыПонимание ключевого слова thisФункции-конструкторыКлючевое слово newИтоговое испытание7Наследование и ключевое слово extends
НаследованиеОтношение «is-a»Ключевое слово extendsМетод super()Наследование свойств и методовИтоговое испытание10Полиморфизм
Что такое полиморфизм?Переопределение унаследованных методовИспользование superИтоговое задание13Композиция против наследования
Отношения «has-a» и «is-a»Ограничения глубокого наследованияСоздание объектов2Организация кода
Что такое модули?Экспорт с помощью exportИмпорт с помощью importDefault против именованных экспортов5Инкапсуляция и доступ
ИнкапсуляцияПубличные и приватные поля классовПриватные методыЗадание на повторение8Организация кода ООП
Организация классов в модули11Проект: Отрисовщик фигур
Настройка: Класс Shape и экспортНаследование класса Circle14Система управления библиотекой
Проектирование библиотекиКласс Book с использованием композиции6Проект: Простой банковский счет
Класс BankAccountПополнение и снятие средств9Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление