Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Prosze o pomoc w zrozumieniu obiektów
Forum PHP.pl > Forum > Przedszkole
adbacz
Własnie rozpoczałem naukę JavaScript. Kurs z neta dostępny pod stronką: Poradnik Webmastera.

Na podanej stronce jest na jednym z listingów coś takiego:

Kod
function Punkt_toString()
{
    return "(" + this.x + "," + this.y + ")";
}

function Punkt(x, y)
{
    this.x = x;
    this.y = y;
    this.toString = Punkt_toString;
}

var p = new Punkt(10, 20);
alert("Współrzędne punktu to " + p);


Niestety nie chce mi to działać. Zacząłem sobie analizowac kod no i zmodyfikowałem troszke przy okazji dodałem coś nowego. Chodzi o to, że to wyżej nie chce działać, ale to moje już tak. Obkomentowane zmienione elementy:
Kod
//Dodana właściwość param w parametrze funkcji oraz później zamiast this.x jesy param.x
function _punkt_ToString(param) {
  return "Współrzędne to (" + param.x + ", " + param.y + ")";
}

function WspolrzedneWypisz(x, y) {
  this.x = x;
  this.y = y;
  
  //Tutaj wysyłam do wunkcji this. Nie wiem czy to dobrze, ale wszystko działa więc chyba dobrze
  //W oryginalnym kodzie jest this.ToString = _punkt_ToString; więc to tak jakby w ogóle nie było funkcji ale tylko pole.
  this.ToString = _punkt_ToString(this);
  
  this.Alertuj = function() {
    alert(this.ToString);
  }
  this.Wypisz = function() {
    document.write(this.ToString);
  }
}


No i później na stronie mam takie coś:
  1. <script type="text/javascript">
  2. var Punkt = new WspolrzedneWypisz(2, 2);
  3. Punkt.Wypisz();
  4. <a href="java script:Punkt.Alertuj()">Alertuj</a>


Mogę liczyć na czyjś głos w tej sprawie dlaczego jest tak a nie inaczej?
bulias
  1. function Punkt_toString()
  2. {
  3. return "(" + this.x + "," + this.y + ")";
  4. }
  5.  
  6. function Punkt(x, y)
  7. {
  8. this.x = x;
  9. this.y = y;
  10. this.toString = Punkt_toString;
  11. }
  12.  
  13. var p = new Punkt(10, 20);
  14. alert("Współrzędne punktu to " + p);

w czym jest problem? Głównie w tym ćwiczeniu pewnie chodziło o utworzenie obiektu z konstruktorem, a do tego nadpisanie funkcji toString. Pamiętaj że wielkość liter ma znaczenie w JS toString != ToString.
adbacz
Ja działam cały czas na Operze 11.50. No tak, nie sprawdzałem na innej. Ale w sumie powinno się pisac kod który działa na możliwie najwiekszej ilości przeglądarek prawda?
!*!
Kod który podałeś działa na Operze. A na przyszłość sprawdź to
adbacz
Tak, już też doszedłem do tego, że działa;/

Może mi ktoś wytłumaczyc dlaczego gdy robimy takie coś:
Kod
this.toString = Punkt_toString;


To mimo, że jest to funkcja, nie potrzeba na końcu nawiasów nawet pustych? Nie jest wyjaśnione w kursie a ciekawi mnie to bo w PHP tak nie można.

PS. !*! - Dzięki za linka, bardzo mi sie przyda.
!*!
Nie ma to znaczenia, a w php od chyba 5.3 też nie musisz ich robić. W js nie ma jakotako podziału na metody, można powiedzieć że wszytko tam jest "funkcją".
Rid
Jak chce Pan zobaczyć dlaczego nie działa ,to użyć firebuga,albo jakiegoś innego debugera i linijka po linijce debugować.
bulias
Nie wiem czy miałeś kiedyś czynienia ze wskaźnikami na funkcje np. C++. To można sobie kojarzyć właśnie w z takimi wskaźnikami na funkcje wink.gif a jeszcze prościej jako że w JS funkcja jest obiektem to tak jakbyś przypisywał wskaźnikowi na co ma wskazywać czyli w tym wypadku na funkcje. Dodając nawiasy od razu ją wywołujesz

Cytat
można powiedzieć że wszytko tam jest "funkcją"
Ja bym powiedział że obiektem.
  1. var bar = new Function ('jeden', 'dwa', 'return jeden + dwa;');

wywołanie:
  1. bar(1,2)
adbacz
Dziękuję za wytłumaczenie. Dziwny troche ten JS dla mnie po tym do czego się przyzwyczaiłem w PHP no ale nie wszystko przychodzi łatwo. Dziękuję za pomoc i wyrozumiałość.

Pozdrawiam.
kamil4u
Nawiasy służą jedynie do wywołania funkcji. Jeżeli ich nie ma to przekazywana jest referencja do funkcji.

Polecam: http://kurs.browsehappy.pl/JavaScript/Funkcje i przykład z "Funkcje jako obiekt".
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.