Witam,
mam pytanie, jakie są właściwe główne, istotne różnice miedzy klasa a funkcja w JS?
Wątek przeniesiony 2016-12-25 13:24 z Webmastering przez Ktos.
Klasa w JS to wyspecjalizowana funkcja służąca do tworzenia obiektów w konkretny sposób na bazie prototypu. To cukier składniowy dla funkcji-konstruktora i metod prototypu. W JS każda klasa jest funkcją, ale nie każda funkcja jest klasą.
Ten cukier składniowy (class) jest niezbędny do wabienia ludzi, których 'callback hell' itp. odstrasza od JS. To co się dzieje na naszych oczach, to próba eliminacji wesołej twórczości na x sposobów tworzenia obiektów mających jakieś znaczenie dla 'większej' aplikacji.
class ClassicalCar {}
typeof ClassicalCar
// "function"
class ModernCar extends ClassicalCar {}
ModernCar.prototype
// ClassicalCar {}
function FunctionalCar() {}
typeof FunctionalCar
// "function"
function ModernFunctionalCar() {}
ModernFunctionalCar.prototype = Object.create(FunctionalCar.prototype);
ModernFunctionalCar.prototype
// FunctionalCar {}
Myślę, że warto odpuścić klasy w JS. I tak pod spodem będą to zwykłe funkcje i "prototype". Za dużo zamieszania.
class
i constructor
, a odejmujesz return this
Na przykladzie Angulara 1.5.x . Tam wykorzystywanie klas nie ma sensu, skoro i tak - jak ktos powiedzial, nie ma metod prywatnych. Dlatego, tak czy inaczej trzeba zrobic funkcje, zeby ta prywatnosc zachowac. I na pomoc przychodzi TypeScript. Ucze sie teraz angulara2 i wyglada to znaacznie lepiej.
Hasło warte przytoczenia w kontekście tematu: prekompilacja javascript.
Klasa to tylko lukier składniowy w przypadku zagmatwanego, ale topowego javascriptu, co już kolega zapewne bardziej biegły ode mnie przytoczył. Klasy sensu stricte na wzór chociażby tych javowych w js nie istnieją. Akurat w przypadku js klasa jest pojęciem węższym, funkcja jest pojęciem szerszym.
ps. uważam że dobrze, iż w Es5/6 (nie pamiętam) pojawiło się słowo kluczowe class, uprości to kod w przypadku zastosowania konkretnego wzorca.
Miałem okazję z bardzo bliska przyglądać się rozwojowi języka ActionScript (podobnie jak JS opartemu o ECMAScript) od wersji 1.0, poprzez 2.0, po 3.0 i agonię:/ W mojej opinii JS podąża tą drogą i znajduje się obecnie tam gdzie AS był w 2004 roku (rok wcześniej wprowadzono wersję 2.0 i klasy):
https://en.wikipedia.org/wiki/ActionScript#Timeline_by_ActionScript_version
Po dodaniu TypeScript JS zaczyna się lekko ocierać o rok 2006 dla ActionScript (wersja 3.0), choć do AS3, JS w obecnej postaci jest nadal 'ho ho' daleko. IMHO to jedyna słuszna droga i jednocześnie nadzieja, że za 3 lata wspomnienia o prototype
będą się pojawiały jedynie na wieczorkach kombatanckich developerów JS z doświadczeniem 5+ lat.
jakie są główne różnice między młotkiem a samochodem wyścigowym
:P