Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Problem z generowaniem wartości zmiennej w 'klasie' nadrzędnej
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Master Pain
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.
wookieb
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".
Master Pain
Dziękuję, pomogło. Firebug... no tak smile.gif

A powiedz mi, co takiego się stało? this.constructor() uruchomił konstruktor rodzica?
wookieb
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.
Master Pain
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?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.