Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript] zmienne klasowe "protected" w javascript
--adrian--
post
Post #1





Goście







Witam
W taki sposob realizuje dziedziczenie w javascripcie:
  1. var KlasaPochodna=function()
  2. {
  3. var tempBazowa=new KlasaBazowa();
  4. for (property in tempBazowa)
  5. {
  6. this[property] = tempBazowa[property];
  7. }
  8.  
  9. ...
  10. }

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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
stefan33
post
Post #2





Grupa: Zarejestrowani
Postów: 49
Pomógł: 4
Dołączył: 22.07.2012

Ostrzeżenie: (0%)
-----


Dziekuje bardzo za odpowiedzi (IMG:style_emoticons/default/smile.gif) Wydaje mi sie ze wszystkie przeslania zrozumialem pewnie jeszcze bede wracal do tego tematu poczytac w przyszlosci (IMG:style_emoticons/default/biggrin.gif) Nie pozostaje nic tylko ogarniac coraz wiecej i wiecej (IMG:style_emoticons/default/tongue.gif)
Co do angielskiego to wiem cos o tym (IMG:style_emoticons/default/tongue.gif) mozna jako tako wszystko czytac, ale jak rodowity angol cos mowi to nie rozumiec ani slowa (IMG:style_emoticons/default/tongue.gif)


edit:
A mialbym jeszcze takie pytanie: nie istnieje mozliwosc zebym mogl operowac bezposrednio na odziedziczonej zmiennej prywatnej? Dla przykladu:
  1. var KlasaBazowa=function()
  2. {
  3. var pole="domyslnaWartosc";
  4.  
  5. this.setPole=function(newPole)
  6. {
  7. pole=newPole;
  8. }
  9.  
  10. this.getPole=function()
  11. {
  12. return pole;
  13. }
  14. }
  15.  
  16.  
  17. var KlasaPochodna=function()
  18. {
  19. KlasaBazowa.call(this);
  20.  
  21. alert(pole); // nie dziala, fajnie by bylo gdyby dzialalo
  22. alert(this.getPole()); // dziala
  23. }

Bo tak to w sumie bez sensu, jesli musze tworzyc dla kazdej zmiennej prywatnej publiczny get i set aby mozna bylo sie do niej odwolywac w klasie podrzednej, to rownie dobrze moge ja uczynic publiczna..

Ten post edytował stefan33 11.09.2012, 09:26:36
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(stefan33 @ 11.09.2012, 10:10:00 ) *
A mialbym jeszcze takie pytanie: nie istnieje mozliwosc zebym mogl operowac bezposrednio na odziedziczonej zmiennej prywatnej?
...
Bo tak to w sumie bez sensu, jesli musze tworzyc dla kazdej zmiennej prywatnej publiczny get i set aby mozna bylo sie do niej odwolywac w klasie podrzednej, to rownie dobrze moge ja uczynic publiczna..

Jeśli programowałeś w jakimkolwiek języku, przeczytaj jeszcze raz a zauważysz, że z tym pytaniem lekko się zagalopowałeś - lekko ponieważ wiem o co Ci chodzi, jednak... zmienna prywatna zawsze ma pozostać jako zmienna prywatna w kontekście danej klasy, klasy czyli szkieletu obiektu, tutaj nie ma klas ale z kolei są "prototypy"... w JS zmienne prywatne z najmniejszym narzutem są te zachowujące się jak statyczne (widzę, że powinieneś wiedzieć jak je zaimplementować skoro umiałeś zrobić zwykłe zmienne prywatne z getterem i setterem...), większy już próbując tworzyć co instancję nowe zmienne gdzie często trzeba jakiś getter i setter gdyż niestety choć funkcja niemal ta sama, to co instancję obiektu tworzysz nowa funkcję w pamięci... (przeczytaj całość...)...

że tak powiem, troszku wypiłem i zastanawia mnie też, dlaczego jakiś programista nie podjął dyskusji, ale skoro trochę mam czasu spróbuję napisać to co wiem...

na języki programowania należy patrzeć jak na narzędzia, jedne są lepsze do pewnych rzeczy, inne są lesze do innych...

zanim przejdę do właściwej wypowiedzi chciałbym nadmienić, iż np. Bjarne Stroustrup (związany z językiem C++) uważa, iż stratą czasu jest tworzenie często niepotrzebnej otoczki getterów i setterów - i w zasadzie tu z nim się zgodzę, gdyż widzę jak wielu stosuje kapsułkowanie jako sztuka tylko dla sztuki - fakt, że czasami to niezbędne ale nie popadajmy ze skrajności w skrajność...

jak już wspomniałeś i zauważyłeś niby nie warto tak pisać i dalej napiszę niby gdyż ;p... no właśnie gdyż, i tu chcę się odwołać do hasła "notacja węgierska" - nie trzeba jej całej stosować ale przynajmniej zasada zmiennych prywatnych zaczynających się od podkreślnika bywa przydatna w takich językach jak JS ale... skoro te zmienne są "prywatne" a są publiczne gdzie każdy je może nadpisać to jakie są - są zmiennymi chronionymi (protected) o które pytałeś się w temacie (jak niby chronione jak nie chronione ;p), a no a chronione to są na jakiej zasadzie ;p? dziedziczysz to możesz z nimi robić co zechcesz (niby nie ma do nich dostępu z zewnątrz ale zawsze można dorzucić kolejną warstwę - dla chcącego nic trudnego ^^)... i uwierz mi, tu sama notacja na protected wystarczy, a na zmienne prywatne zwykłe z var... tworzysz szkielet aplikacji i nie obce jest Ci kapsułkowanie?? nie problem, zrób w deseń:
(function(window, document){
// tu porób sobie co tam chcesz z wykorzystaniem zasięgów zmiennych, porób obiekty itd tak by nic nie wyciekło na zewnątrz, zbinduj zdarzenia do drzewa DOM i masz wszystko hermetyczne i stosowanie pewnych zasad wystarczy... lub w tej funkcji anonimowej zwróć pewien interfejs, obiekt do aplikacji gdzie zewnętrzny programista resztę może bezpiecznie modyfikować, a co nie może to jest ukryte, zresztą co tak naprawdę znaczy bezpiecznie modyfikować(IMG:style_emoticons/default/questionmark.gif)
})(window, document);

sorki za ten tekst który pewnie trudno zrozumieć (nie wiem czy był sens próba przekazania swoich spostrzeżeń), popisz trochę w JS z wykorzystaniem różnych technik, poczytaj trochę... jeśli poznasz JS i zaznajomisz się z techniką programowania zdarzeniowego to sam powinieneś stwierdzić, iż w zasadzie masz wszystko co trzeba... są tez mini biblioteki symulujące pisanie na klasach ale to wszystko nie potrzebne, przyrównał bym to do kogoś kto próbuje poznać jQuery nie znając JS, a potem nie może dana osoba zrozumieć o co chodzi, gdzie i co znaczy this w kodzie itd...

jak masz jakieś pytania jeszcze to sprecyzuj je jeszcze jakoś inaczej a spróbuję podzielić się spostrzeżeniami, dobrze by było, gdyby jeszcze jakiś programista się wypowiedział ;p - nie jestem programistą z zawodu (choć przez pewien czas w ten sposób dorabiałem i teraz ostatnio robię magisterkę z infy bez wysiłku a równolegle zrobiłem różnice programowe gdyż jakoś jednak programowanie trochu mnie interesuje)

pozdro
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 23:46