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

co oznacza bind(this)?

Object Storage Arubacloud
0 głosów
1,229 wizyt
pytanie zadane 27 grudnia 2018 w JavaScript przez Arcix Nowicjusz (180 p.)

Witam,

mam pewien problem, otóż uczę się języka JavaScript i ostatnio zatrzymałem się na jednej rzeczy, której nie rozumiem. Otóż co oznacza bind(this) po kropce? Np. w tym przykładzie

 document.querySelector('#button1').addEventListener("click", this.printBig.bind(this));

co oznacza this.printBig.bind(this)?

Z góry dziękuję :)

1 odpowiedź

+1 głos
odpowiedź 27 grudnia 2018 przez Comandeer Guru (600,730 p.)

bind tworzy kopię danej funkcji ze sztywno ustawionym kontekstem this. W tym wypadku wymuszamy, żeby wewnątrz printBig this zawsze wskazywało na obiekt posiadający tę metodę zamiast na element DOM, na który klikniemy.

komentarz 27 grudnia 2018 przez ScriptyChris Mędrzec (190,190 p.)

Comandeer był szybszy, więc tylko dodam kilka przykładów z różnym this na podstawie kodu @Arcix: https://codepen.io/anon/pen/PXKRGw

Po kliknięciu w przycisk, w konsoli widać na co wskazuje this.

Przypadki z arrow function pominąłem.

komentarz 27 grudnia 2018 przez Tomek Sochacki Ekspert (227,510 p.)

@Comandeer,

bind tworzy kopię danej funkcji

jesteś pewien tego tworzenia kopii? Pytam, ponieważ kojarzę, że bind nie tworzył kopii w takim znaczeniu jak byśmy tego pewnie oczekiwali, ale jest jakby to powiedzieć wraperem na bazową funkcję i to ją de facto wywołuje... ale popraw mnie jeśli się mylę bo może coś mi się pokręciło...

komentarz 27 grudnia 2018 przez Comandeer Guru (600,730 p.)

Tak, to prawda, to bardziej wrapper: https://tc39.github.io/ecma262/#sec-bound-function-exotic-objects

Z kopią chodziło mi o to, że otrzymujemy dokładnie to samo działanie, a jedyną różnicą jest zmienione this.

komentarz 27 grudnia 2018 przez ScriptyChris Mędrzec (190,190 p.)

jedyną różnicą jest zmienione this

Jedyną to nie, bo przecież można też odgórnie przypisać parametry i przez to w trakcie wywołania "zdziwić się", że funkcja dostaje nie to, czego byśmy się spodziewali:

function foo(param1, param2) {
	console.log('param1:',param1, 'param2:', param2);
}

foo('pierwszy', 'drugi'); // param1: pierwszy param2: drugi

var boundFoo = foo.bind(null, 'zonk');
boundFoo('pierwszy', 'drugi'); // param1: zonk param2: pierwszy

 

Podobne pytania

0 głosów
0 odpowiedzi 120 wizyt
pytanie zadane 11 lipca 2020 w JavaScript przez Greeenone Pasjonat (16,100 p.)
+1 głos
1 odpowiedź 364 wizyt
pytanie zadane 11 listopada 2016 w JavaScript przez subterras Użytkownik (680 p.)
0 głosów
2 odpowiedzi 158 wizyt
pytanie zadane 17 października 2019 w JavaScript przez awa Użytkownik (510 p.)

92,539 zapytań

141,382 odpowiedzi

319,477 komentarzy

61,928 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich 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 10% 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!

...