JS: Прототипы
Теория: Введение
JavaScript часто изучают через знакомую схему: классы, экземпляры, наследование, методы. На старте это удобно. Но в какой-то момент эта схема начинает мешать: код ведет себя не так, как вы ожидаете, а объяснения в духе "просто запомните" больше не работают.
В этом курсе мы разберем, как JavaScript устроен под капотом, и соберем более точную модель языка.

Зачем нужен этот курс
Этот курс про внутреннюю механику JavaScript. Мы будем говорить о вещах, которые обычно прячут за синтаксисом:
- в JavaScript нет классической классовой модели, как в Java или C#
classв JS во многом синтаксический сахар- класс в итоге опирается на функции и прототипы
- функции сами являются объектами
thisне означает "текущий объект", его значение зависит от способа вызова
Это может звучать как "нам раньше объясняли неправильно". На деле нет. Раньше вы смотрели на язык с более высокого уровня, чтобы быстрее начать писать код. Сейчас добавляем следующий слой, чтобы понимать, почему код ведет себя именно так.
Что будем изучать
Основные темы курса:
- иерархии типов
- наследование
- прототипы
- позднее связывание
Параллельно пройдем еще две важные темы:
- парсинг
- абстрактное синтаксическое дерево (AST)
Эти темы не "для галочки". Они нужны для проекта, который проходит через весь курс.
Проект курса
Мы реализуем библиотеку, которая берет описание HTML в виде DSL и превращает его в обычную HTML-строку.
Пример входных данных:
Результат:
Зачем такой проект:
- на нем удобно разбирать прототипы и поведение объектов
- он показывает, как устроены шаблонизаторы
- он связывает "теорию языка" с практикой: входные данные -> структура -> итоговый HTML
Где это встречается в реальной разработке
Такая идея используется постоянно:
- в шаблонизаторах на бэкенде
- в JSX и похожих подходах на фронтенде
- во внутреннем представлении HTML в браузере (DOM)
- в инструментах, которые программно генерируют и изменяют разметку
То есть проект учебный, но механика очень прикладная.
Как будем учиться
Формат курса построен вокруг инженерной практики:
- разработка через тесты
- серия рефакторингов вместо "сразу идеального" решения
- внимание к дизайну кода
- функциональный стиль там, где он упрощает решение
Мы начнем с более простой реализации, а затем шаг за шагом улучшим ее. На каждом шаге будет видно, что именно изменилось и зачем.
Что важно взять из вводного урока
Если коротко, цель этого урока такая: перестроить ожидания.
Дальше в курсе мы не будем воспринимать JavaScript как "упрощенную Java". Мы будем смотреть на него как на язык с собственной объектной моделью, где ключевую роль играют функции и прототипы. Когда эта рамка становится понятной, остальные темы курса ложатся заметно проще.