• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzanie pozycji myszki wewnątrz obiektu

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
530 wizyt
pytanie zadane 23 maja 2016 w JavaScript przez Ehlert Ekspert (214,270 p.)

Witam,

mam taki oto kod:

var App = (function(){
	this.posX = 0;
	this.posY = 0;
	this.init = (function(){
	     window.onmousemove = (function(event){
	     event = event || window.event;
	     //console.log(event);
	     this.posX = event.clientX;
	     this.posY = event.clientY;
	     });
	     this.timeStep();
	});

	this.timeStep = (function(){
	     console.info(this.posX + "\t" + this.posY);
	     var _this = this;
	     setTimeout((function(){
		  _this.timeStep();
	     }), 2000);
	});
});

(function(){
var text = new App();
text.init();
})();

Dlaczego po wyświetleniu event widzę że pola clientX i Y mają wartość a w metodzie timeStep wywala mi 0. sad

3 odpowiedzi

+1 głos
odpowiedź 23 maja 2016 przez RegularLemon Stary wyjadacz (12,280 p.)
wybrane 23 maja 2016 przez Ehlert
 
Najlepsza

Wydaje mi się, że problemem są te dwie linijki:

this.posX = event.clientX;
this.posY = event.clientY;

This w ty miejscu wskazuje na obiekt Window. Powinieneś użyć zmiennej pomocniczej, np. self

var App = (function(){
    this.posX = 0;
    this.posY = 0;
    this.init = (function(){
	     var self = this;
         window.onmousemove = (function(event){
         event = event || window.event;
         self.posX = event.clientX;
         self.posY = event.clientY;
         });
         this.timeStep();
    });
 
    this.timeStep = (function(){
         console.info(this.posX + "\t" + this.posY);
         var _this = this;
         setTimeout((function(){
          _this.timeStep();
         }), 2000);
    });
});

 

+1 głos
odpowiedź 23 maja 2016 przez ScriptyChris Mędrzec (190,190 p.)
edycja 23 maja 2016 przez ScriptyChris

Sprawdź czy this wewnątrz metody timeStep() na pewno wskazuje na to, co powinno, a nie na window Object. Może musisz zastosować tutaj pomocniczą zmienną "typu" self i do niej przypisać this.

P.S. Po co Ci tyle funkcji przypominających IIFE, jeśli nie korzystasz z cechy IIFE i nei wywołujesz ich od razu? Jeśli stosujesz function expression, to nie musisz go zamykać w nawiasy okrągłe - jeśli nie chcesz potem od razu wywołać takiej funkcji i tym samym stworzyć IIFE.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions

http://benalman.com/news/2010/11/immediately-invoked-function-expression/

komentarz 23 maja 2016 przez Ehlert Ekspert (214,270 p.)

Okrągłe nawiasy nic nie zmieniają a dla mnie to jest nieco czytelniejsze smiley

komentarz 23 maja 2016 przez ScriptyChris Mędrzec (190,190 p.)

Czy jest czytelniejsze? Może zależy od gustu :) Zwróć uwagę na to, że gdy stosujesz dodatkowe nawiasy, to jest do dodatkowy element który musisz domykać na końcu - więc jak dla mnie trochę więcej jest z tym zachodu.

Gdy widać napis function, to wiadomo, że to funkcja - nawias z przodu daje mi natomiast do zrozumienia, że będzie to IIFE i wtedy na końcu całej funkcji oczekiwałbym dwóch nawiasów (), które to IIFE wywołają. W przypadku Twojego zapisu, widzę nawias otwierający przed function, myślę "stosujesz IIFE", ale na końcu nawiasów nie ma, więc to trochę mylące.

+1 głos
odpowiedź 23 maja 2016 przez Comandeer Guru (606,120 p.)
A ja polecam pobawić się ES6, gdzie są arrow functions i klasy ;)

Podobne pytania

0 głosów
0 odpowiedzi 173 wizyt
pytanie zadane 18 października 2016 w JavaScript przez Alterwar Dyskutant (7,650 p.)
+1 głos
0 odpowiedzi 197 wizyt
0 głosów
1 odpowiedź 1,721 wizyt
pytanie zadane 3 sierpnia 2017 w OpenGL, Unity przez Stami Gaduła (3,790 p.)

93,103 zapytań

142,077 odpowiedzi

321,562 komentarzy

62,445 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...