Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Problem z generowaniem wartości zmiennej w 'klasie' nadrzędnej
Master Pain
post 21.02.2011, 15:16:25
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


Witam

Mam obiekt oraz 3 'klasy' (zupełnie przykładowe, chodzi mi o prosty przykład):
  1. var Registry = {
  2. id: 0,
  3.  
  4. generujNoweId: function() {
  5. return ++this.id;
  6. }
  7. }
  8.  
  9. function Figura() {
  10. this.id = Registry.generujNoweId();
  11. this.nazwa = 'Figura';
  12. this.szerokosc = 0;
  13. this.wysokosc = 0;
  14.  
  15. this.pobierzId = function() {
  16. return this.id;
  17. }
  18.  
  19. this.pobierzNazwe = function() {
  20. return this.nazwa;
  21. }
  22. }
  23.  
  24. Prostokat.prototype = new Figura();
  25.  
  26. function Prostokat(szerokosc, wysokosc) {
  27. this.szerokosc = szerokosc;
  28. this.wysokosc = wysokosc;
  29. this.nazwa = 'Prostokat';
  30.  
  31. this.obliczPolePowierzchni = function() {
  32. return this.szerokosc*this.wysokosc;
  33. }
  34. }
  35.  
  36. Kwadrat.prototype = new Prostokat();
  37.  
  38. function Kwadrat(szerokosc) {
  39. this.szerokosc = szerokosc;
  40. this.wysokosc = szerokosc;
  41. this.nazwa = 'Kwadrat';
  42. }
  43.  
  44. var k1 = new Kwadrat(12);
  45. alert('Kwadrat 1 ID: ' + k1.id);
  46. //Spodziewane ID = 1 jest
  47.  
  48. var k2 = new Kwadrat(5);
  49. alert('Kwadrat 2 ID: ' + k2.id);
  50. //Spodziewane ID = 2; nie ma, jest 1
  51.  
  52. alert('Registry ID: ' + Registry.id);
  53. //Spodziewane ID = 2; nie ma, jest 1


Tak jak w komentarzach przy alertach - nie generuje mi spodziewanych wartości ID.
Wiem, że chodzi o jakiś inny sposób dziedziczenia. Nie wiem tylko jak to zrobić, żeby poprawnie generowało nowe ID za każdym razem, kiedy tworzę nowy obiekt Kwadrat.

Ten post edytował Master Pain 21.02.2011, 15:17:33
Go to the top of the page
+Quote Post
wookieb
post 21.02.2011, 15:29:19
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie używaj alert. Zainstaluj firebuga i używaj console.log

Zamień
[JAVASCRIPT] pobierz, plaintext
  1. return ++this.id;
[JAVASCRIPT] pobierz, plaintext


na
[JAVASCRIPT] pobierz, plaintext
  1. return this.id++;
[JAVASCRIPT] pobierz, plaintext


Na końcu kodu funkcji Kwadrat dodaj
[JAVASCRIPT] pobierz, plaintext
  1. this.constructor();
[JAVASCRIPT] pobierz, plaintext


wszystko się wyjaśnia jak dodajesz jakiś debug w funkcji "Figura".


--------------------
Go to the top of the page
+Quote Post
Master Pain
post 21.02.2011, 15:36:57
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


Dziękuję, pomogło. Firebug... no tak smile.gif

A powiedz mi, co takiego się stało? this.constructor() uruchomił konstruktor rodzica?
Go to the top of the page
+Quote Post
wookieb
post 21.02.2011, 15:46:37
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Tak. funkcja figura odpaliła się tylko raz przy przypisaniu prototypu (new Figura).
Do kwadratu przypisałeś obiekt Prostokat (który jako konstruktor ma "Figura"). Pewnie dlatego Kwadrat przejął ten konstruktor. Nie traktuj teraz moich słów jako pewnik. Dopiero całkiem niedawno zacząłem się uczyć dziedziczenia w JS.


--------------------
Go to the top of the page
+Quote Post
Master Pain
post 21.02.2011, 16:01:28
Post #5





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 5.04.2007
Skąd: Jarocin

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


Tak jak i ja wink.gif Widać jesteś krok dalej.
A czy da się to zautomatyzować, żeby nie musieć wywoływać w każdej 'klasie' konstruktora rodzica?
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:55