Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] this !== window
Forum PHP.pl > Forum > Po stronie przeglądarki
wNogachSpisz
Witam
Niezależnie jak i gdzie zdeklaruje funkcje, po jej wywolaniu "this" zawse bedzie referencją window.
Jest to niewydajne, kazda funkcja przed odpaleniem musi miec zbudowane referencje globalnego zasiegu.
Ponoć można zrobic tak, że pod "this" będzie zamiast window np. garstka argumentow albo najlepiej nic.
Jak to zrobic?

Ten gość od jQuery mowi o tym od 19 minuty, kończy na początku 21.
http://youtu.be/0LKDImgRfrg?t=19m
Sephirus
Nie wiem czy dobrze Cię zrozumiałem ale chodzi Ci pewnie ogólnie o kontekst smile.gif

Są do tego dwie metody które ma każda funkcja:

[JAVASCRIPT] pobierz, plaintext
  1. // załóżmy taką bezsensowną funkcje:
  2. function testowa()
  3. {
  4. alert(this.tagName);
  5. }
  6. // funkcja nie ma sensu bo nic w sobie nie ma ...
  7.  
  8. // ale...
  9.  
  10. // Mamy dwie metody:
  11. // .call i .apply
  12.  
  13. var jakisDiv = document.getElementById('jakis_div');
  14.  
  15. testowa.call(jakisDiv);
  16.  
  17. // lub
  18.  
  19. testowa.apply(jakisDiv);
  20.  
  21. // Da zamierzony efetk
  22.  
[JAVASCRIPT] pobierz, plaintext


Czyli wywołujemy funkcje testowa z odpowiednim kontestem - to co podamy jako 1szy argument apply i call będzie this'em w tej funkcji wink.gif

Co do argumentów:

[JAVASCRIPT] pobierz, plaintext
  1. funkcja.call(jakis_obiekt, arg1, arg2, arg3);
  2.  
  3. funkcja.apply(jakis_obiekt, new Array(arg1, arg2, arg3));
  4.  
  5. // dadzą efekt:
  6.  
  7. funkcja(arg1,arg2,arg3);
  8.  
  9. // w której to jako this będzie obiekt "jakis_obiekt"
[JAVASCRIPT] pobierz, plaintext


wink.gif
wNogachSpisz
Świetnie, teraz już widze że każda funkcja ma metode call().
Właśnie o to mi chodziło.

Dzięki!
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.