Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: This w onClick
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Yorki
Witam, mam problem, tak mniej więcej wygląda struktura mojej "klasy":

  1. function Lib(){
  2. this.init = function(c){
  3. c.onmousemove = this.mouseMove;
  4. }
  5. this.mouseMove = function(e){
  6. if (this.getElementByCursor(e.clientX, e.clientY)){
  7. document.body.style.cursor = "pointer";
  8. }
  9. }
  10. this.getElementByCursor(x,y){
  11. //
  12. }
  13. }


Problem jest w CYLib.mouseMove, to this powinno się odnosić do Lib, a nie do obiektu z którego wywołane jest onClick. Jak odwołać się do Lib?
Crozin
Powinieneś tutaj skorzystać z Function.call().
kamil4u
Myślę, że lepiej w tym wypadku zrobić sobie zmienną that:
Kod
function Lib(){
this.that = this;


i odwoływać się właśnie przez tą zmienną
Yorki
Cytat(kamil4u @ 31.08.2012, 20:27:58 ) *
Myślę, że lepiej w tym wypadku zrobić sobie zmienną that:
Kod
function Lib(){
this.that = this;


i odwoływać się właśnie przez tą zmienną


Ale co to daje? Nic. Bo nie odwołam się przez this.that ..

Cytat(Crozin @ 31.08.2012, 19:21:05 ) *
Powinieneś tutaj skorzystać z Function.call().


Nie wiem czy dobrze napisałem, ale próba odwołania się przez :

  1. this.mouseMove = function(e){
  2. if (Lib.getElementByCursor.call(this, e.clientX, e.clientY) != false){
  3. document.body.style.cursor = "pointer";
  4. }
  5. }


Kończy się : Uncaught TypeError: Cannot call method 'call' of undefined
Crozin
@kamil4u: Jak już to var that = this; - w takich przypadkach nie zależy nam na tym by właściwość ta była publiczna.

Cytat
Ale co to daje? Nic. Bo nie odwołam się przez this.that ..
W takim przypadku nie odwołujesz się przez this.that, a samo that, które jest referencją do pożądanego przez Ciebie obiektu/kontekstu.

Co do Function.call()
[JAVASCRIPT] pobierz, plaintext
  1. function Lib() {
  2. var self = this;
  3.  
  4. this.init = function(c) {
  5. c.onmousemove = function(e) {
  6. self.mouseMove.call(self, e);
  7. }
  8. }
  9.  
  10. this.mouseMove = function(e){
  11. if (this.getElementByCursor(e.clientX, e.clientY)){
  12. document.body.style.cursor = "pointer";
  13. }
  14. }
  15. this.getElementByCursor(x,y){
  16. //
  17. }
  18. }
[JAVASCRIPT] pobierz, plaintext


EDIT: Ale w sumie, lepiej używać już obejścia w postaci self/that - mieszanie z kontekstem wywołania obiektów w JS prędzej czy później zaczyna być męczące.
Yorki
Dzięki już ogarniam z tym Function.call() 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.