Javascript класи
У тому уроці ми з вами розберемо, як писати класи в ecmascript 6.
Давайте я спочатку дуже коротко повторю навіщо потрібні класи. Дуже часто нам потрібно описувати якісь сутності, які мають будь то даними і можуть використовувати якісь методи, які визначають їх поведінку. Для цього ми описуємо клас і кожен раз при його ініціалізації отримуємо новий екземпляр класу. При цьому у нас обов'язково викликається конструктор класу
Як же виглядає клас Опис за допомогою класів ес6?
за допомогою слова class ми описали новий клас. Також ми додали метод constructor, який приймає year, month, day і записує їх в this. Ми створили змінну today, яка є екземпляр класу SimpleDate.
Давайте додамо метод toString, який буде повертати дату в людському форматі
Тепер у екземпляр класу з'явився метод toString, викликаючи який ми отримуємо красивий висновок дати.
Також ми можемо використовувати спадкування в класах з допомогою слова extend. Давайте створимо клас OtherDate, який буде успадковуватися від SimpleDate.
Для того, щоб виконати конструктор Парент класу ми використовуємо метод super і передаємо в нього аргументи. Super використовується для того, щоб звертатися до батьківського класу.
Як ви бачите, ми викликали конструктор Паренте і також у нас є доступ до всіх методів з Парент класу. Саме тому метод toString у нас спрацював
Давайте тепер пеопределім метод toString з іншим висновком
Не потрібно думати, що класи в ес6 це якась магія. Якщо ми подивимося, що таке клас SimpleDate, то побачимо, що це просто функція
Тобто класи створюють звичайні функції з прототипна спадкуванням. Але ви не можете викликати клас безпосередньо як функцію
У нас випаде помилка
тому-що класи не можна викликати безпосередньо.
Описавши метод toString ми описували метод прототипу
Також класах можна додавати крім прототипну методів, статичні методи. Вони будуть є методами самого класу, а не методами prototype.
Якщо ми напишемо в класі OtherDate метод hello
То ми можемо викликати його за допомогою OtherDate.hello (). В прототипах він доступний не буде.