Wątek przeniesiony 2016-12-25 13:24 z Webmastering przez Ktos.

klasa a funkcja różnice JS

0

Witam,

mam pytanie, jakie są właściwe główne, istotne różnice miedzy klasa a funkcja w JS?

0

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ą.

1

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.

0
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 {}
1

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.

0

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.

0

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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1