• 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

Hosting forpsi easy 1 pln
+1 głos
288 wizyt
pytanie zadane 23 maja 2016 w JavaScript przez Ehlert Ekspert (210,670 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,260 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 (210,670 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 (596,200 p.)
A ja polecam pobawić się ES6, gdzie są arrow functions i klasy ;)

Podobne pytania

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

92,079 zapytań

140,733 odpowiedzi

317,692 komentarzy

61,394 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 15% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...