ООП в JS6
Привет, недавно написал про ООП в PHP, в принципе все то же самое только ком-то может быть будет легче воспринимать другой язык программирования. Тут же речь пойдет о JS.
Основы ООП
Есть классы и объекты.
Класс — это шаблон по которому строится объект. Это сущность, которая может выполнять какие-то свойства. Все что выполняет какие-либо действия это все классы.
Есть что-то общее это класс, а есть что-то частное персонализированное это есть экземпляр класса — объект. Ваш монитор, это есть объект класса Мониторы.
В ООП есть 3 основные принципы:
- наследование,
- полиморфизм,
- инкапсуляция.
Наследование
Есть общий класс (Человек), родительский, у него есть методы (ходить, есть, пить). В классах, методы, это те же самые функции.
Есть подклассы, охотник и доктор они выходят из класса человек и могут наследовать методы супер класса Человек, т.е. ходить, есть, пить.
Полиморфизм
Это уникальные описание свойств метода потомка. Т.е. выше есть подкласс Доктор, у этого подкласса есть свой подкласс Хирург у него есть тоже метод лечить, но он уже будет уникальным от других методов лечить, допустим врач дантист не может лечить так же как Хирург, разные направления.
Методы(функции) подклассов не доступны в их родителях, только в подклассах.
Полиморфизм — перелпределение метода(функции) с последующим дополнением, своебразное рашрениеметода.
Инкапсуляция
Ограничение доступа. Можно сделать методы(функции) открытии и закрытии, по умолчанию все функции открытые.
Прототип (__proto__) — дополнительные свойства объекта.
Если перед названием метода поставить нижне подчеркивание, то метод считается закрытым.
Практика
<script> class Person() //класс { constructor(name, year) //конструктор - свойства у объекта Person { this.name = name; //свойства, поля класса this.year = year; } calcAge() //метод для нахождения возраста { return new Date().getGullYear - this.year; } sayhi() // метод - функция приветствия { return `${this.name}, Hi!`; } } let user = new Person("Антон", 1990); console.log(`${user.name} имеет возраст ${user.calcAge()}`); </script>
Статические методы
Статические методы привязаны к классу, а не статические к объекту класса.
<script> class Person() //класс { constructor(name, year) //конструктор - свойства у объекта Person { this.name = name; //свойства, поля класса this.year = year; } calcAge() //метод для нахождения возраста { return new Date().getGullYear - this.year; } sayhi() // метод - функция приветствия { return `${this.name}, Hi!`; } static test(x) { return x*2; } } let user = new Person("Антон", 1990); console.log(`${user.name} имеет возраст ${user.calcAge()}`); console.log(Person.test(20)); //вызов статического метода </script>
Практика — наследование
<script> class Teacher extends Person { constructor(name,year, sybject) { super(name,year); //вызываем базовый конструктор класса Person this.sybject = sybject; } } </script>
Практика полиформизм
<script> class Teacher extends Person { constructor(name,year, sybject) { super(name,year); //вызываем базовый конструктор this.sybject = sybject; } sayhi() // метод - функция приветствия { //console.log(`${this.name} имеет возраст ${this.calcAge()}`); return `${super.sayhi()}, as Teacher Hi!`; } } </script> let user = new Teacher ("Ivan", 1192, "En Lang"); console.log(user.sayhi());
ПредыдущаяДля вызова методов или полей используется this если метод (функция) имеет одинаковое название, тогда используется слово super.