klasa a funkcja różnice JS

klasa a funkcja różnice JS

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

L9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 144
0

Witam,

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

Maciej Cąderek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1264
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ą.

bobojak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
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.

DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1788
0
Kopiuj
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 {}
IE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 317
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.

  • Rejestracja: dni
  • Ostatnio: dni
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.

  • Rejestracja: dni
  • Ostatnio: dni
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.

bobojak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.