ООП в JavaScript
Объектно-ориентированное программирование — это паттерн, основанный на концепции различных типов объектов и их свойств.
Подавляющее большинство языков программирования поддерживают ООП, но сегодня мы остановимся на основных характеристиках ООП в JavaScript и продемонстрируем их на простых примерах.
![7416581_4818.jpg 7416581_4818.jpg](/upload/medialibrary/d54/d54a0899c47372b8afab0187f3e20486/7416581_4818.jpg)
Для начала рассмотрим два основных принципа ООП: наследование и полиморфизм на базовом уровне в смысле того, как они связаны с кодом на JavaScript, используя основные характеристики OOP в JavaScript, для иллюстрации этих принципов.
Конструкторы и ключевое слово “this”
Двумя наиболее важными понятиями для объектно-ориентированного программирования в JavaScript, как и почти во всех других языках программирования, являются ключевое слово this и constructors.
Хотя Es6+ считается «синтаксическим сахаром» и обеспечивает более удобные способы написания конструкторов или объявления классов, в этой статье я буду использовать Es5, чтобы читатели могли лучше понять, как на самом деле работают конструкторы.
Точно так же, как объектные литералы, где объекты пар ключ-значение присваиваются переменной, работает и конструктор, но, в отличие от объектных литералов, конструкторы для нескольких экземпляров состоят из прототипов и наследования.
Во-первых, имея конструктор с одним или несколькими свойствами, мы можем создать из него экземпляр объекта с помощью ключевого слова new. См. ниже пример кода и результаты вывода на консоль:
![1.jpg 1.jpg](/upload/medialibrary/46e/46e77a7eb3ccd71b0bb1bc2bf975d937/1.jpg)
![2.jpg 2.jpg](/upload/medialibrary/2c7/2c74b1cd9a869d480aa29954facf6c40/2.jpg)
Ключевое слово this играет чрезвычайно важную роль, его значение определяется текущим контекстом, в котором выполняется код. В нашем примере его значение ограничено контекстом функции Entity. При использовании вне области действия функции или в глобальной области вы получите объект window, поскольку теперь он существует в глобальном контексте.
Прототипы и прототипное наследование
Каждый объект в javascript имеет прототип. Прототип сам по себе является объектом, и все объекты могут наследовать свойства и методы от своих прототипов. Это означает, что мы можем назначать или добавлять выбранные нами функции в цепочку прототипов конструктора. См. представление кода ниже:
![3.jpg 3.jpg](/upload/medialibrary/12c/12c47de6226ce6d254a3fe97e94f8884/3.jpg)
![4.jpg 4.jpg](/upload/medialibrary/307/307d2c1cd9668a2c4bf697a709b2003d/4.jpg)
Протипное наследование происходит, когда объект наследует свои свойства от другого объекта в том же контексте кода, например с помощью метода object.create(). См. представление кода ниже:
![5.jpg 5.jpg](/upload/medialibrary/f44/f44874bc3ee82484e634c1b8da0b4ff5/5.jpg)
![6.jpg 6.jpg](/upload/medialibrary/36a/36a6c4f9958187daa3b799f47083c8f7/6.jpg)
Заключение
Существуют основные объекты, которые используют конструкторы, но не рекомендуются для использования, например, объект Date().
При работе с объектными литералами прототипы берутся из object.prototype, а при работе с объектом конструктора — из (the constructor name).prototype.
Доступ к прототипам возможен с помощью цикла for-in.
Добавление/назначение функций в прототип конструктора считается эффективным приемом и обычно рекомендуется в хорошей практике.
Метод Call() — это функция, используемая для вызова другой функции из другого блока кода в том же контексте. Синтаксис Es6+ для кода, приведенного в этой статье, можно найти здесь.
Источник: https://medium.com/geekculture/o-o-p-in-javascript-369434afcf1dРасскажи друзьям: