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

co oznacza bind(this)?

0 głosów
112 wizyt
pytanie zadane 27 grudnia 2018 w JavaScript, jQuery, AJAX przez Arcix Nowicjusz (160 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 Mentor (457,660 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 JSHolic Szeryf (78,700 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 Mędrzec (184,230 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 Mentor (457,660 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 JSHolic Szeryf (78,700 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

+1 głos
1 odpowiedź 113 wizyt
pytanie zadane 11 listopada 2016 w JavaScript, jQuery, AJAX przez subterras Użytkownik (680 p.)
0 głosów
0 odpowiedzi 67 wizyt
0 głosów
0 odpowiedzi 169 wizyt
pytanie zadane 1 listopada 2017 w JavaScript, jQuery, AJAX przez Marchiew Mądrala (6,310 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

64,913 zapytań

111,382 odpowiedzi

234,401 komentarzy

46,749 pasjonatów

Przeglądających: 112
Pasjonatów: 0 Gości: 112

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...