классы поверх прототиповclasses on top of prototypes

ООП в JS/TSOOP in JS/TS

У JS есть настоящие классы (ES6+ — синтаксический сахар над прототипами), а TS добавляет поверх статическую типизацию: интерфейсы, модификаторы доступа, abstract-классы. Раздел раскладывает 14 базовых концепций ООП плюс полиморфизм на реальные механизмы JS/TS, отмечая, где JS и TS расходятся (например, настоящие приватные поля #x против модификаторов доступа TS, которые существуют только на этапе компиляции) — из базовых убраны деструкторы и события, для которых в языке нет отдельной синтаксической конструкции. Каркас: 17 карточек, страницы ещё не написаны.JS has real classes (ES6+ sugar over prototypes), and TS layers static typing on top: interfaces, access modifiers, abstract classes. This section maps the 14 baseline OOP concepts plus polymorphism onto JS/TS's actual mechanisms, noting where JS and TS diverge (e.g. real #x private fields vs TS's compile-time-only access modifiers) — destructors and events are left out of the baseline set since neither has a dedicated language construct. Skeleton: 17 cards, pages not yet written.

Базовые концепции ООПBaseline OOP concepts

Определение классов, инициализацияClass definition & initializationclass Foo {} — сахар над цепочкой прототипов; параметр-свойства TS ( — sugar over the prototype chain; TS parameter properties (constructor(private x: number)) сокращают объявление поля и присваивание в одну строку.) collapse a field declaration and assignment into one line.interview КонструкторыConstructorsconstructor() — только один на класс, перегрузки нет; TS допускает перегрузочные сигнатуры конструктора, но реализация всё равно одна. — only one per class, no overloading; TS allows overload signatures for the constructor, but there's still a single implementation.interview ПоляFields#field (ES2022) — настоящая приватность на уровне рантайма, в отличие от модификаторов TS (ES2022) — real runtime-enforced privacy, unlike TS's public/private/protected, которые стираются при компиляции и не защищают в рантайме. modifiers, which are erased at compile time and unenforced at runtime.interview МетодыMethodsметоды экземпляра живут в prototype, instance methods live on the prototype, static методы — на самом классе; геттеры/сеттеры вынесены в "свойства" ниже. methods live on the class itself; getters/setters are covered under "properties" below. Сигнатуры и перегрузкаSignatures & overloadingв JS перегрузки нет — побеждает последнее объявление, вместо неё default/rest-параметры; TS даёт перегрузочные сигнатуры (несколько деклараций, одна реализация).JS has no overloading — the last definition wins, default/rest parameters stand in for it; TS provides overload signatures (multiple declarations, one implementation).interview СвойстваPropertiesget/set — полноценная встроенная фича классов JS, а не эмуляция через методы. — a first-class built-in feature of JS classes, not an emulation via methods.interview ИндексаторыIndexersлюбой объект JS индексируется через any JS object is indexable via [] из коробки; TS добавляет индексные сигнатуры out of the box; TS adds index signatures [key: string]: T для их типизации. to type this. НаследованиеInheritanceextends/super() — единичное наследование через цепочку прототипов; TS добавляет — single inheritance via the prototype chain; TS adds implements для интерфейсов и for interfaces and abstract class.interview ПолиморфизмPolymorphismдинамический через переопределение методов в цепочке прототипов; TS добавляет структурный полиморфизм — любой объект нужной формы подходит без явного extends/implements.dynamic via method overriding along the prototype chain; TS adds structural polymorphism — any object with the right shape qualifies with no explicit extends/implements needed.interview Вложенные классыNested classesнет отдельного синтаксиса вложенных классов с особыми правилами доступа — класс можно объявить внутри функции/модуля, инкапсуляцию даёт замыкание, а не языковая конструкция.no dedicated nested-class syntax with special access rules — a class can be declared inside a function/module scope, with closures providing encapsulation instead of a language construct. КонстантыConstantsconst фиксирует привязку, а не глубокую неизменяемость ( fixes the binding, not deep immutability (const obj = {} всё ещё позволяет менять поля obj); still allows mutating obj's fields); readonly в TS — только на этапе компиляции, in TS is compile-time only, Object.freeze() даёт настоящую поверхностную неизменяемость в рантайме. gives real (shallow) runtime immutability.gotcha Копирование объектовCopying objectsповерхностная копия через spread shallow copy via spread {...obj} или or Object.assign(), глубокая — через , deep copy via structuredClone() или ручную рекурсию; специального dunder-хука вроде Python- or manual recursion; no built-in deep-copy hook like Python's __deepcopy__ нет.. Члены типаType membersтолько в TS — вложенные типы/интерфейсы, экспорт нескольких типов из модуля, статические члены класса как типовые константы.TS-only — nested types/interfaces, exporting multiple types from a module, static class members as type-level constants.

Специфика JS/TSJS/TS-specific

то, что не укладывается в классическую модель ООПwhat doesn't fit the classic OOP model
Прототипное наследование под капотомPrototypal inheritance under the hoodclass — сахар; is sugar; Object.create, цепочка прототипов, , the prototype chain, __proto__ (устаревший аксессор) против (legacy accessor) vs Object.getPrototypeOf (правильный способ). (the correct way).interview Структурная типизация TSTypeScript structural typingформализованная duck typing — два несвязанных класса с одинаковой формой взаимозаменяемы, в отличие от номинативной типизации C++/Java.duck typing formalized — two unrelated classes with the same shape are interchangeable, unlike nominal typing in C++/Java.interview Mixinsответ JS на отсутствие множественного наследования — функции, принимающие класс и возвращающие новый класс с добавленным поведением.JS's answer to the lack of multiple inheritance — functions that take a class and return a new class with added behavior. TypeScript Decorators@Component — экспериментальная фича (stage 3), применяется к классам/методам/полям иначе, чем настоящие декораторы Python. — an experimental (stage-3) feature, applies to classes/methods/fields differently from Python's real decorators.

статусstatus

Это каркас: 2 раздела и 17 карточек зафиксированы, страницы ещё не написаны. К 14 базовым концепциям ООП добавлен полиморфизм (переопределение методов в прототипах + структурный полиморфизм TS); деструкторов и событий в списке нет — для них в языке нет отдельной синтаксической конструкции. Метка interview отмечает частые темы на собеседованиях, gotcha — типичную ловушку (const и неизменяемость).This is a skeleton: 2 sections and 17 cards are locked in, pages not yet written. Polymorphism (prototype-chain method overriding plus TS structural polymorphism) was added to the 14 baseline OOP concepts; destructors and events are missing from the list since neither has a dedicated syntactic construct in the language. The interview tag marks common interview topics, gotcha marks a typical trap (const and immutability).