Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odwołanie do metody w kontekscie obiektu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
WiruSSS
Witam, zapewne prozaiczna sprawa ale jakoś nie mogę sobie z nią poradzić. Mam sobie taki konstruktor

[JAVASCRIPT] pobierz, plaintext
  1. var Ob = function()
  2. {
  3. this.pole_1 = 1;
  4. this.pole_2 = 2;
  5. }
  6.  
  7. //Dodaje metody do prototypu, aby zaoszczędzić pamięc przy większej ilości utworzonych obiektów
  8. Ob.prototype.metoda_1 = function()
  9. {
  10. $('#cokolwiek').click(function(){
  11.  
  12. //tutaj bym chciał się odwołac do metoda_2
  13.  
  14. });
  15. }
  16.  
  17. Ob.prototype.metoda_2 = function()
  18. {
  19. return 'costam';
  20. }
  21.  
[JAVASCRIPT] pobierz, plaintext


...to jest tylko przykład dlatego prosze sie nie zastanawiać nad zasadnoscią tej konstrukcji. Docelowy skrypt jest zupełnie inny jednak sam schemat jest podobny. Tworze kilkanascie obiektów i potzebuję po kliku na dany element odwołać się do metoda_2 ale w kontekscie konkretnego obiektu, jak to mogę zrobić?
lukasz1985
Spróbuj tak.

[JAVASCRIPT] pobierz, plaintext
  1. var Ob = function()
  2. {
  3. this.pole_1 = 1;
  4. this.pole_2 = 2;
  5. }
  6.  
  7. //Dodaje metody do prototypu, aby zaoszczędzić pamięc przy większej ilości utworzonych obiektów
  8. Ob.prototype.metoda_1 = function()
  9. {
  10.  
  11. var self = this;
  12. $('#cokolwiek').click(function(){
  13.  
  14. //tutaj bym chciał się odwołac do metoda_2
  15. self.pole_1 = 4;
  16. self.metoda_2();
  17. });
  18. }
  19.  
  20. Ob.prototype.metoda_2 = function()
  21. {
  22. return 'costam';
  23. }
[JAVASCRIPT] pobierz, plaintext



można też użyć operatora bind, to powinno działać:


[JAVASCRIPT] pobierz, plaintext
  1. var Ob = function()
  2. {
  3. this.pole_1 = 1;
  4. this.pole_2 = 2;
  5. }
  6.  
  7. //Dodaje metody do prototypu, aby zaoszczędzić pamięc przy większej ilości utworzonych obiektów
  8. Ob.prototype.metoda_1 = function()
  9. {
  10.  
  11.  
  12. $('#cokolwiek').click(this.metoda_2.bind(this));
  13. }
  14.  
  15. Ob.prototype.metoda_2 = function()
  16. {
  17. return 'costam';
  18. }
[JAVASCRIPT] pobierz, plaintext


Z tym że ten drugi sposób w którejś przeglądarce nie chodzi, ale jest na to sposób:

https://developer.mozilla.org/en-US/docs/We...Function%2Fbind

WiruSSS
dziekuję ..pierwszy sposób działa smile.gif

czyli wystarczyło przekazać referencję this, mój bład polegał na tym, że właśnie w click odwoływałem się to this ..a przecież tam this odnosił się już do elementu klikanego. Czyli tak jak podejrzewałem dość oczywista oczywistość ..dziekuję za pomoc smile.gif
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.