Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> This w onClick
Yorki
post 31.08.2012, 19:48:26
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 12.09.2005

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Crozin
post 31.08.2012, 20:21:05
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Powinieneś tutaj skorzystać z Function.call().
Go to the top of the page
+Quote Post
kamil4u
post 31.08.2012, 21:27:58
Post #3





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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ą


--------------------
Go to the top of the page
+Quote Post
Yorki
post 31.08.2012, 23:35:59
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 12.09.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował Yorki 31.08.2012, 23:38:33
Go to the top of the page
+Quote Post
Crozin
post 1.09.2012, 01:30:38
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@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.

Ten post edytował Crozin 1.09.2012, 01:32:56
Go to the top of the page
+Quote Post
Yorki
post 1.09.2012, 01:43:41
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 12.09.2005

Ostrzeżenie: (0%)
-----


Dzięki już ogarniam z tym Function.call() smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:00