Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Callback nie ma dostępu to this
LowiczakPL
post 3.03.2021, 14:00:17
Post #1





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Piszę klasę w JS i mam problem z dostępem do this z funkcji callback EventListenera.

Czy to dlatego że ta funkcja callback nie staje się częścią wywołujacej ją klasy?

kod online https://jsfiddle.net/eojfb8vc/

Kod
class testObj {
  constructor() {
    this.val = {
      start: 0,                  
    };
    document.addEventListener( "mousedown", this.checkMouseDown );
    document.addEventListener( "mouseup", this.checkMouseUp );
  }

  checkMouseDown(event) {
    console.log('MOUSE DOWN #########');
    console.log(this.val);
    this.val.start = new Date().getTime();              
  }

  checkMouseUp(event) {
    console.log('MOUSE UP #########');              
  }
}

let obj = new testObj();


Ten post edytował LowiczakPL 3.03.2021, 14:01:43


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
trueblue
post 5.03.2021, 07:48:58
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Wewnątrz listenera this wskazuje na obiekt, do którego jest on podpięty - warto czytać dokumentację.

  1. document.addEventListener("mousedown", this.checkMouseDown.bind(this));
  2. document.addEventListener("mouseup", this.checkMouseUp.bind(this));


Ten post edytował trueblue 5.03.2021, 07:49:12


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 5.03.2021, 07:51:05
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


https://developer.mozilla.org/pl/docs/Web/J...m_event_handler
Go to the top of the page
+Quote Post
LowiczakPL
post 5.03.2021, 09:29:03
Post #4





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


ojjj, teraz sobie przypomniałem że dokładnie tak samo robiłem, bindowałem this, ale robiłem to tak dawno że o tym niestety zapomniałem ...

dzięki za podpowiedź i przypomnienie

oczywiście napisałem sobie klasę w inny sposób aby obejść ten problem https://jsfiddle.net/9y3Lmezc/, piszę klasy w dwojaki sposób, znam te 2 sposoby

Kod
testObj = (function () {
    val = {
      start: 0,                  
    };  

  function checkMouseDown(event) {
    console.log('MOUSE DOWN #########');
    console.log(val);
    val.start = new Date().getTime();              
  }

  function checkMouseUp(event) {
    console.log('MOUSE UP #########');              
  }
  
  return {
    init: function () {
      document.addEventListener( "mousedown", checkMouseDown );
      document.addEventListener( "mouseup", checkMouseUp );
    }
  }
}());

testObj.init();


Mam w związku z tym pytanie, który sposób Waszym zdaniem jest lepszy, pierwszy czy drugi, niestety moja wiedza na ten temat jest ZEROWA (po prostu tak nauczyłem się pisać bez wgłębiania się dalej) jakie są plusy i minusy klas napisanych w ten sposób?

Ten post edytował LowiczakPL 5.03.2021, 09:40:03


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
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: 20.04.2024 - 03:48