| --adrian-- |
Post
#1
|
|
Goście |
Witam
W taki sposob realizuje dziedziczenie w javascripcie:
Niestety w ten sposob przekazywane sa tylko funkcje i zmienne "publiczne". Moje pytanie jest czy da sie w jakis sposob dziedziczyc z klasy bazowej zmienne i metody "prywatne"(tj. w innych jezykach "protected")? z góry dziekuje za wszystkie odpowiedzi |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 4 Dołączył: 22.07.2012 Ostrzeżenie: (0%)
|
No wiesz mi chodzilo o zmienna prywatna majaca byc protected, ciezko to nazywac w js w którym takie rzeczy nie sa jawnie wyszczególnione. Co do pamieci to mam poki co wolna reke bo pisze dla siebie wiec nie zamierzam sie przejmowac (IMG:style_emoticons/default/tongue.gif) Niby czasami kapsulkowanie sztuka dla sztuki, ale mimo wszystko wedlugo mnie to dobra praktyka, bo z kolei idac w druga strone i pomijajac kapsulkowanie kiedy sie podoba mozna w koncu sie przejechac lekko
Zrobie wlasnie tak jak mowisz- poki co odpuszczam sobie tworzenie jakichs super poprawnych klas i m.in. prywatne beda sie zaczynaly od "_" i git (IMG:style_emoticons/default/biggrin.gif) Dzieki za wstepny kod jakos bede sobie kombinowal zeby to wszystko mi hulalo (IMG:style_emoticons/default/wink.gif) Mysle ze to co napisales jest zrozumiale, wiec dziekuje bardzo za kolejne rady, jestem mega zdziwiony ze chcialo Ci sie tyle pisac (IMG:style_emoticons/default/tongue.gif) Tak wlasnie zrobie, tzn. bede po prostu pisal swoj kod a z czasem na pewno ogarne sobie jak wszystko powinno byc. Do tej pory mialem napisane proste klasy w ktorych nie wykorzystywalem dziedziczenia i zdawalo mi sie ze znam obiektowy js, stad zalozylem temat zeby szybko sie dowiedziec jak zrobic "protected" i nagle sie okazuje ze prawie nic nie wiem (IMG:style_emoticons/default/tongue.gif) ale teraz juz mam na to o wiele lepszy widok, myslalem, ze w js bedzie sie dalo wszystko imitowac czarno na bialym jak w c++ czy javie, ale tak nie bedzie. Co do zmiennych protected to natknalem sie na taki artykul wiec widac, ze js to ciezki kawalek chleba: http://code42.pl/2010/12/19/obiektowy-java...wietego-graala/ Dzieki jeszcze raz za pomoc,w razie czego bede pisal, ale mam nadzieje, ze juz sobie bede radzic (IMG:style_emoticons/default/tongue.gif) Chociaz w sumie jakies male pytanko zawsze sie znajdzie (IMG:style_emoticons/default/smile.gif) Naprawde jeszcze raz dziekuje za pomoc, jezeli nie ma Pan juz czasu to nie ma problemu prosze nie odpisywac (IMG:style_emoticons/default/tongue.gif) Czy takie bindowania sa poprawne? Czy jakies jest lepsze/gorsze, czy po prostu uzywac sobie zaleznie od potrzeb? Z gory dziekuje za odpowiedz (IMG:style_emoticons/default/smile.gif)
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%)
|
Co do zmiennych protected to natknalem sie na taki artykul wiec widac, ze js to ciezki kawalek chleba: http://code42.pl/2010/12/19/obiektowy-java...wietego-graala/ Chyba nawet ja to kiedyś czytałem ;p - ale jak już wspomniałem i rozwinąłem to co ja i większość rozumie pod "protected" to jak ktoś będzie chciał tą zmienną zrównać z ziemią to to zrobi choćby specjalnie dziedzicząc... więc jak już wspomniałem raczej w granicach zdrowego rozsądku sama notacja tutaj powinna wystarczyć, a resztę jeśli fragment programu musisz udostępnić bez możliwości naruszenia kodu, to całość kapsułkujesz i udostępniasz główny interfejs, a jak inny programista bezpiecznie coś chce zmieniać to widzi na co zwracać uwagę jeśli to nie jest zakapsułkowane... Czy takie bindowania sa poprawne? Czy jakies jest lepsze/gorsze, czy po prostu uzywac sobie zaleznie od potrzeb? oba są poprawne więc wątek rozwinę na inne tory... ale wcześniej napomnę, iż minus podpinania zdarzeń "onload" i im podobnych bezpośrednio to maksymalnie jeden listener (obiekt|funkcja nasłuchująca) do elementu, lepszy by był tutaj addEventListener (IE chyba attachEvent), a rozwiązanie uniwersalne w bibliotekach np. jQuery to po prostu .bind lub aliasy pewnych przypadków bezpośredniego wywołania jak .click... miałem zejść na inne tory, więc a propo pierwszego skoro użyłeś nazwy "jakasKlasa" chciałbym wspomnieć, iż ostatnio zwłaszcza w świecie PHP modne stało się określenie Dependy Injection (jakoś tak się pisze ;p) - widzę, że raczej jesteś w temacie to się nie rozpisuję ;p - coby klasy niby były bardziej uniwersalne... ale tu ja tego nie piszę w kierunku, że jest źle, wszystko zależy od kontekstu i należy rozróżniać programowanie strukturalne od programowania obiektowego i od programowania zorientowanego obiektowo ;p (nie chce mi się przytaczać pewnych regułek ale OOP najbardziej charakterystyczne jest dla javy choć i tam można myśleć strukturalnie), co do bindowania wspomniałem wyżej a i jeszcze temat bindowania rozwinę... druga technika zwłaszcza dotycząca kapsułkowania przez (function(){})() jest przydatna w celu skapsułkowania (ukrycia dostępu przed resztą programu) fragmetu kodu lub w celu przekazania zmiennej (bądź referencji do obiektu) którą chce się podpiąć pod bindowaną funkcję, gdzie dana zmienna zmienia swoją wartość choć mogła by być dostępna w skope bindowanej funkcji... akurat w Twoim fragmencie kodu nie potrzebnie robiłeś przypisywania funkcji anonimowej podczas, gdy ona nic nie robiła, zamiast: divPrzycisk.onclick=function() { przekazanaFunkcja(); } wystarczyło napisać: divPrzycisk.onclick=przekazanaFunkcja; lub: divPrzycisk.onclick=this.jakasFunkcja; i tutaj znowu zboczę z tematu choć tamten jeszcze pociągnę... jeśli na stronie jest mnóstwo elementów i przypisujesz mnóstwo listenerów tych samych to dużego narzutu pamięci nie będzie gdyż przypisujesz referencję do tej samej funkcji | obiektu różnym obiektom, jednak to nie jest zalecane przy bindowaniu powiedzmy setek (zapomnij o liczbach, to przykład, nie jestem programista i nie na wszystkie testy mam czas) tych samych elementów (np. duuuuża tabelka i wiele wierszy), to bardziej optymalna będzie technika zaimplementowana w metodzie z jQuery która dawniej nazywała się .live (ale nasłuchiwała na całym dokumencie chyba pod "body") a teraz jest już dostępne .delegate - na czym to polega, bindujesz najniższego rodzica (wspólny element) i sprawdzasz kliknięcia dla dzieci, pomijasz bindowanie tysięcy elementów (co może zająć czas) a dodatkowo masz nasłuch na elementu dodane do danego drzewa znacznie później np. przez AJAX, tą technikę zrozumiesz jak zrozumiesz propagację zdarzeń w drzewie DOM i będziesz umiał wtedy to sam implementować w natywnym JavaScript (choć może czasem wystarczy wiedza jak to działa, po co tworzyć koło od nowa ^^)... ale sam ten zapis z drugiej metody bardziej mi się kojarzy z przekazywaniem argumentów, gdzie np. podpinałeś do wielu elementów podobną funkcję a chciałeś wywołać dodatkowo jakąś metodę, czyli to co pokazałeś ale zrobić coś więcej... i tu głupi przykład jak z Twoim bindem samo zapamiętanie który to element bindowany w pętli (bez tego z referencji pamiętało by ostatnią iterację) for(i = 0; i<100; ++i) // np niżej to kolekcja elementów divPrzycisk[i].onclick=(function(i_wartosc){return function(){jakasFunkcja(i_wartosc);}})(i); gdzie "jakasFunkcja" jest w skope widoczności, ale zwracam uwagę, iż do kolejnego elementu przypisywana jest nowa anonimowa funkcja i jest zapamiętywany stan zmiennej "i" - często ta technika przydaje się też przy korzystaniu z setTimeout(...) (oczywiście bez niejawnego evala ;p), gdzie to co napisałem wyglądało prawie jak to co Ty napisałeś z tą różnicą, iż w efekcie skrócenia można było z tym samym skutkiem zapisać divPrzycisk.onclick=this.jakasFunkcja; ps. dawniej jak poznawałem JS to trochę przeglądałem kod biblioteki Prototype [nie pamiętam kto wspomniał, iż tam kod jest samo dokumentujący się] (kod był i raczej dalej jest czytelnie napisany - choćby z tego względu warto choć na 5 min rzucić okiem ;]), wtedy w jQuery była jedna większa sieczka, teraz jest duuużo lepiej jak pamiętam z przed roku i w sumie jQuery to chyba najlepsza minimalistyczna biblioteka do JS, a plusem jest implementacja biblioteki Sizzle do wyszukiwania elementów po CSS (nowe przeglądarki w czystym js to .querySelector) i kilka przydatnych tricków jak .delegate (dawniej coś podobnego na własną rękę implementowałem w czystym JS) sorki, że się rozpisałem, ale znowu dziś świętowałem w granicach zdrowego rozsądku a mam co świętować ^^, jutro jadę odebrać żonkę i córunię (fajnie mała poskrzekuje ^^ - a mamusi już dziś w nocy dała się w kość ^^ pozdro ;] |
|
|
|
-adrian- [JavaScript] zmienne klasowe "protected" w javascript 9.09.2012, 11:57:17
zegarek84 javascript na innej zasadzie ma obiektowowość - po... 9.09.2012, 13:58:31
stefan33 Dziekuje bardzo za odpowiedz(wczesniej nie bylem n... 10.09.2012, 09:47:06
droslaw Funkcje call/apply to jeden ze sposobów na dziedzi... 10.09.2012, 10:19:05
stefan33 Dziekuje za odpowiedz i potwierdzenie, no tak trze... 10.09.2012, 10:41:20
droslaw Pola prywatne się dzieczyczy ale ze względu na to,... 10.09.2012, 10:51:39
stefan33 Moglbys jasniej napisac co masz na mysli? Mi chodz... 10.09.2012, 11:14:15
droslaw Ja pisałem o dziedziczeniu przez prototype. Jeśli ... 10.09.2012, 11:50:07
zegarek84 RANY JULEK ;/ - ALEŻ CI ZACZĘLI MIESZAĆ ;/
metody... 10.09.2012, 17:38:32
stefan33 Dziekuje bardzo za odpowiedzi Wydaje mi sie ze ws... 11.09.2012, 09:10:00 
zegarek84 Cytat(stefan33 @ 11.09.2012, 10:10:00... 12.09.2012, 22:00:32 ![]() ![]() |
|
Aktualny czas: 25.12.2025 - 14:30 |