ES6 класове
Като начало има три концепции, които всеки обектно-ориентиран език за програмиране трябва да включва: капсулиране, наследяване и полиморфизъм. Познати думи, нали? Сега с прости думи за всяка концепция:
Капсулиране
Наследяване
При прототипното наследяване ситуацията е точно обратната. Дядото на папагала израства трети крак за себе си и той автоматично се появява в бащата и сина (първообраз на наследство срещу природата). Бащата на папагала не харесва сегашното състояние на нещата и той решава, че не иска повече да бъде папагал и се превръща в орел (с три крака). Както вероятно вече се досещате, синът на папагал вече не е папагал, а истински орел (но отново с три крака). Три крака са твърде много за сина му и той решава да се откаже от единия (сега имаме обикновен орел с два крака).
Но това не е всичко! Единственият останал папагал (дядо) решил, че три лапи не са достатъчни и си купил още една, и също решил да стане лястовица. В резултат от обичайното семейство папагали получихме: дядо лястовица с четири крака, баща на орел с три крака, син на орел с два крака. Това е целият смисъл на прототипното наследяване. Звучи ли като лудост? Да Тогава нека преминем към кода:
Полиморфизъм
Полиморфизмът е най-лесен за разбиране с вградени конструктори (String, Array, Object ...). Сега, ако бъдете попитани: „С какво числото 42 се различава от масива [4, 2] и какво е общото между тях?“, Какво бихте отговорили? Със сигурност започвате да говорите за примитиви и обекти, как се различават, какво може да се направи с тези и други, когато ви попитат за разликите. Но как те си приличат? Напълно различни типове данни! Но, очевидно, те споделят определена част от методите, например методът toString, наследен от Object. Това вече ли е полиморфизъм? Още не, но се приближаваме. Методът toString може много успешно да бъде преназначен, първо, в прототипа на конструкторската функция и, второ, веднага за този конкретен обект.
Голям извод, което искам да направите от всичко по-горе: „Javascript не е като другите програмни езици с класическо разбиране на ООП“. Не бива да живеете в страна на предразсъдъци и да се опитвате да прехвърлите разбирането си за ООП от друг език - само ще губите време.
И така, по-горе вече видяхте достатъчно примери за конструктори, свойства и методи, които използвахме преди пускането на новия стандарт. Няма да ви измъчвам с чакане повече и нека отидем направо към кода:
Примерът по-горе може да бъде написан в стил ES5 по следния начин:
Какво трябва да знаете за класовете: