6 Kwiecień (środa)

Kto ma coś do zaprezentowania? Gdzie idziemy na piwo?

Nie mam co prezentowac, ale jesli nie bylaby to jednak sroda, tylko jakis inny dzien tygodnia, to chetnie wypilbym piwo

Nie wiem oraz nie wiem. Oraz mam nadzieję że Aenima wciąż zamierza gościć w swoim biurze WRUGi (dziś mój ostatni dzień w Aenimie).

Jeśli ktoś byłby zainteresowany tematem “JavaScript i jQuery - garść najlepszych praktyk” to chętnie opowiem.

W szczególności ujawnię jak w JavaScript definiować prawdziwe klasy i moduły! ;>

na pewno prawdziwe ?:slight_smile:

na pewno prawdziwe ?:)[/quote]
Tak, stworzone klasy będą miały wszystkie właściowści klas, a moduły wszystkie właściwości przestrzeni nazw.

Nie będą do tego wykorzystywane żadne magiczne biblioteki, tylko czysty JavaScript.

Dobre podejście, ale nie nazwałbym tego dalej prawdziwymi klasami i modułami :wink: Chyba, że mówisz o javascripcie 2.

No i stwierdzenie, że będą miały wszystkie właściwości klas też dość odważne. Że tak się złośliwie zapytam: właściwości których klas? :wink:

A pomijając powyższe dywagacje, bardzo chętnie posłucham.

[quote=drogus]Dobre podejście, ale nie nazwałbym tego dalej prawdziwymi klasami i modułami :wink: Chyba, że mówisz o javascripcie 2.

No i stwierdzenie, że będą miały wszystkie właściwości klas też dość odważne. Że tak się złośliwie zapytam: właściwości których klas? ;)[/quote]
Musiałem jakoś zareklamować ;>

Świetnie, że będziesz, choć obawiam się, że już to wszystko wiesz.

Można się facebookować: http://www.facebook.com/event.php?eid=175829819135220

<3

A ktoś jeszcze coś ciekawego powie? Jakiś lightning talk?

Wrzuciłem prezentację na githuba.

Rewelacyjna prezentacja, dawno się tak dużo nie nauczyłem w tak krótkim czasie :slight_smile:

Tym bardziej żałuję, że mnie nie było.

quertoip: szczerze mówiąc już od dłuższego czasu nie pisałem w javascripcie nic większego z użyciem obiektowości, więc jestem cały czas na etapie używania new i stąd pytanie: jak przy takim podejściu jakie przedstawiłeś uzyskujesz dziedziczenie? (wiem, że można to zrobić na różne sposoby, ale pytanie czy znasz coś ciekawego, co nie wymaga pisania kolejnej biblioteki do OOP)

I tak przy okazji, 2 z 3 wad, które podałeś przy new można dość łatwo ominąć: http://jsfiddle.net/VAt5C/1/ - pozostaje tylko konieczność używania new :wink:

Też dawno nic nie pisałem, ale ZTCP ExtJS ma ciekawe rozwiązania dziedziczenia http://edspencer.net/2011/01/classes-in-ext-js-4-under-the-hood.html

Zamiast zwracania literału obiektowego (jak w prezentacji), wewnątrz definicji klasy można zacząć od kopii klasy bazowej:

var that = Object.create( MojaKlasaBazowa() ); // ... return that;
gdzie…

Object.create = function (o) { function F() {} F.prototype = o; return new F(); // pierwsze i ostatnie miejsce, gdzie używa się new };

Tak, przy czym to co wkleiłeś jest po środku między podejściem “klasycznym” (new) i podejściem “nowoczesnym” (closure-based).

W podejściu “klasycznym” (new) należy przypinać metody do prototypu, nie do this. Dzięki temu ich definicja nie jest powielana w każdym obiekcie. I to jest jedyna zaleta tego podejścia.

W podejściu “nowoczesnym” (closure-based) poświęca się pamięć na rzecz nieosiwienia programisty. Zalety to bezpieczne instancjowanie klas, ładna enkapsulacja i przejrzysta definicja klasy.

Hybrydy tych podejść nie przypadają mi do gustu; najczęściej łączą wady wszystkich podejść :wink:

Sprytne! Przy chyba powinno być to zrobione w ten sposób:

var that = Object.create( MojaKlasaBazowa() );

Po małej modyfikacji można też stosunkowo łatwo wywoływać metody z nadrzędnej “klasy”: http://jsfiddle.net/F7VqH/2/ (pewnie jest lepszy sposób, ale to pierwsze co mi przyszło do głowy).

Jak widać będę musiał się poduczyć, dzięki za info!

Zaleta, która jednocześnie jest wadą - w tym przykładzie, który wkleiłem metody przypisane do prototypu i tak nie będą miały dostępu do prywatnych metod i zmiennych. Dlatego rzeczywiście to podejście wymięka w zderzeniu z Object.create.

Dla potomnych do poczytania, znalazłem teraz podczas douczania:


http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

[quote=drogus]Sprytne! Przy chyba powinno być to zrobione w ten sposób:

var that = Object.create( MojaKlasaBazowa() );

[/quote]
Jasne, poprawiłem, dzięki.

Dzięki, pozytywny feedback motywuje do zrobienia następnej za jakiś czas.