JavaScript использует прототипное наследование вместо классового.
В классовых языках объекты являются экземплярами классов, описывающих их структуру и поведение. Наследование осуществляется путем расширения существующих классов.
В JavaScript нет классов в традиционном понимании. Объекты создаются напрямую или на основе других объектов-прототипов. Наследование реализуется через цепочку прототипов, где у каждого объекта есть ссылка на свой "родительский" прототип. При обращении к свойству или методу объекта JavaScript ищет его сначала в самом объекте, затем в его прототипе, затем в прототипе прототипа и так далее по цепочке.
Пример создания объекта и наследования в JavaScript:
javascript
Сравнение классового и прототипного ООП:
| Характеристика | Классовое ООП (Java, C++) | Прототипное ООП (JavaScript) |
|---|---|---|
| Основной механизм | Классы и экземпляры классов | Объекты и прототипы |
| Наследование | Наследование классов с помощью 'extends' | Наследование через цепочку прототипов |
| Создание объектов | С помощью ключевого слова 'new' и конструктора | Напрямую, Object.create(), конструкторы (функции) |
| Полиморфизм | Через переопределение методов в классах | Через переопределение свойств и методов в объектах |
| Инкапсуляция | Модификаторы доступа (public, private, protected) | Соглашения и использование замыканий |
Введение классов в ECMAScript 2015 (ES6) предоставило синтаксический сахар поверх прототипного наследования, делая ООП в JavaScript более похожим на классовые языки, но underlying механизм остается прототипным.
javascript