Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Callback i zmienne...
Forum PHP.pl > Forum > Przedszkole
Qss
Witam,
Ktoś mi wytłumaczy czemu tak się dzieje i jak to ominąć że gdy mamy jakaś zmienna klasową, globalna i jak przypiszemy do niej jakąś wartość w funkcji callback jakiejś metody to przypisana wartość tej zmiennej nie jest dostępna poza funkcjami callback

edit// zauważyłem że pierw wykonuje się fun2, fun i fun3.. dlaczego ?

Przykład:
  1. function myClass(){
  2. this.test = null;
  3. this.fun = function(){
  4. $(document).ready(function(){
  5. this.test = 1;
  6. console.log(this.test);
  7. });
  8. }
  9.  
  10. this.fun2 = function(){
  11. console.log(this.test);
  12. }
  13.  
  14. this.fun3 = function(){
  15. $(document).ready(function(){
  16. console.log(this.test);
  17. });
  18. }
  19. }
  20.  
  21. var obj = new myClass(); // tworze nowy obiekt klasy
  22. obj.fun(); //odpalam funkcje z funkcja z callbackiem gdzie przypisuje do pola test 1 i oczekuje ze ono tam pozostanie (konsola zwraca 1)
  23. obj.fun2(); //ku mojemu zdziwieniu konsola zwraca null
  24. obj.fun3(); //przypadek jak w fun i konsola zwraca 1


Nie pytajcie się dlaczego użyłem tu tej metody
$(document).ready(function()..
w oryginalnym przykładzie jest tam pobierane coś za pomocą chrome API (własnie z callback) i chciałbym to przypisać do zmiennej klasowej po czym obrabiać innymi funkcjami
PrinceOfPersia
To proste: w JavaScript nie ma klas a "this" oznacza nie oznacza kontekstu klasy, tylko kontekst wywołania danej funkcji, a tutaj masz dwie funkcje naraz:

Cytat
this.fun = function(){
$(document).ready(function(){
this.test = 1;
console.log(this.test);
});

}


jak masz $(document).ready to najpewniej "this" to będzie document czyli dodajesz zmienną test do zmiennej document, bo to jest bezpośrednim kontekstem.
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.