Четыре фундаментальных принципа ООП — это Инкапсуляция, Абстракция, Наследование и Полиморфизм. JavaScript поддерживает все их, хотя его подход отличается от классических ООП-языков вроде Java или C++.
Инкапсуляция означает объединение данных и методов вместе при контроле доступа к внутренним деталям.
В JavaScript это достигается с помощью:
# для действительно приватных свойствclass User {
#password;
constructor(pass) { this.#password = pass; }
}
Абстракция означает скрытие сложных деталей реализации и предоставление наружу только необходимого.
В JavaScript абстракция обычно достигается через:
Пользователь взаимодействует с упрощённым интерфейсом, не вникая в лежащую в его основе сложность.
Наследование позволяет классу наследовать свойства и поведение другого класса, способствуя переиспользованию кода.
JavaScript использует прототипное наследование под капотом, но ключевое слово extends предоставляет привычный синтаксис на основе классов:
class Animal { speak() {} }
class Dog extends Animal { speak() { return "Woof"; } }
Полиморфизм позволяет разным объектам отвечать на один и тот же интерфейс или метод по-своему.
В JavaScript это достигается через переопределение методов:
class Shape { area() { return 0; } }
class Circle extends Shape { area() { return Math.PI * r ** 2; } }
class Square extends Shape { area() { return side ** 2; } }
Каждый класс реализует area() по-своему, но при этом все они работают через один интерфейс.
JavaScript реализует все четыре принципа ООП, опираясь главным образом на прототипное наследование и современный синтаксис class, чтобы сделать их доступными и практичными.
Префикс # в JavaScript для приватных полей класса — это единственный способ достичь инкапсуляции, так как замыкания не могут ограничивать доступ к переменным.
Новый — ещё не проверен сообществом
Вы