Jakie jest zastosowanie bind()
w JavaScript?
javascript
function
bind
Sandeep Kumar
źródło
źródło
select = document.querySelector.bind(document)
this
w przeciwnym razie patrzwindow
, globalnego obiektu. Dziękidocument.querySelector.bind(document)
zapewniamy, żeselect
tothis
odnosi się dodocument
, a nie dowindow
. Ktoś mnie poprawi, jeśli źle to zrozumiem.Odpowiedzi:
Powiązanie tworzy nową funkcję, która zmusi
this
wnętrze funkcji do przekazania parametrubind()
.Oto przykład, który pokazuje, jak użyć
bind
do przekazania metody członka, która ma poprawną wartośćthis
:Który drukuje:
Możesz również dodać dodatkowe parametry po parametrze 1st (
this
) ibind
przekaże te wartości do pierwotnej funkcji. Wszelkie dodatkowe parametry przekazane później do funkcji powiązanej zostaną przekazane po parametrach powiązanych:Który drukuje:
Sprawdź powiązanie funkcji JavaScript, aby uzyskać więcej informacji i interaktywne przykłady.
Aktualizacja: ECMAScript 2015 dodaje obsługę
=>
funkcji.=>
funkcje są bardziej zwarte i nie zmieniająthis
wskaźnika z zakresu ich definiowania, więc nie trzeba go używaćbind()
tak często. Na przykład, jeśli chcesz, aby funkcjaButton
od pierwszego przykładu łączyłaclick
wywołanie zwrotne ze zdarzeniem DOM, poniższe są wszystkie prawidłowe sposoby:Lub:
Lub:
źródło
var Note = React.createClass({ add: function(text){ ... }, render: function () { return <button onClick={this.add.bind(null, "New Note")}/> } }
to po kliknięciu przycisku przekazuje on do parametru tekst parametru „Nowa notatka”add
.Najprostszym zastosowaniem
bind()
jest utworzenie funkcji, która niezależnie od tego, jak zostanie wywołana, wywoływana jest z określonąthis
wartością.Więcej informacji można znaleźć pod tym linkiem
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
źródło
prototype
), Które mogą być nowe dla początkujących.wiązanie pozwala
Na przykład masz funkcję odejmowania miesięcznych opłat klubowych
Teraz chcesz ponownie użyć tej funkcji dla innego członka klubu. Pamiętaj, że opłata miesięczna będzie się różnić w zależności od członka.
Wyobraźmy sobie, że Rachel ma saldo 500, a miesięczna opłata członkowska wynosi 90.
Teraz utwórz funkcję, której można używać wielokrotnie, aby co miesiąc pobierać opłatę z jej konta
Teraz ta sama funkcja getMonthlyFee może być używana dla innego członka z inną opłatą członkowską. Na przykład Ross Geller ma saldo 250 i miesięczną opłatę w wysokości 25
źródło
Z dokumentów MDN na
Function.prototype.bind()
:Więc, co to znaczy?!
Cóż, weźmy funkcję, która wygląda następująco:
A teraz weźmy obiekt, który wygląda następująco:
Możemy powiązać naszą funkcję z naszym obiektem w następujący sposób:
Teraz możemy uruchomić w
Obj.log
dowolnym miejscu naszego kodu:To działa, ponieważ związaliśmy wartość
this
naszego obiektuObj
.Ciekawie staje się nie tylko przypisanie wartości
this
, ale również argumentuprop
:Możemy teraz to zrobić:
W przeciwieństwie do
Obj.log
tego nie musimy przekazywaćx
aniy
, ponieważ przekazaliśmy te wartości, kiedy wykonaliśmy swoje zobowiązanie.źródło
Zmienne mają zasięg lokalny i globalny. Załóżmy, że mamy dwie zmienne o tej samej nazwie. Jeden jest zdefiniowany globalnie, a drugi jest zdefiniowany wewnątrz zamknięcia funkcji, a my chcemy uzyskać wartość zmiennej, która jest wewnątrz zamknięcia funkcji. W takim przypadku używamy tej metody bind (). Zobacz prosty przykład poniżej:
źródło
Podsumowanie:
bind()
Metoda przyjmuje obiekt jako pierwszy argument i tworzy nową funkcję. Po wywołaniu funkcji wartościąthis
w treści funkcji będzie obiekt przekazany jako argumentbind()
funkcji.Jak w ogóle
this
działa w JSWartość
this
w javascript jest zależna zawsze zależy od tego, jaki obiekt jest wywoływany. Wartość tego zawsze odnosi się do obiektu po lewej stronie kropki, z którego wywoływana jest funkcja . W przypadku zasięgu globalnym jest towindow
(lubglobal
wnodeJS
). Tylkocall
,apply
abind
może zmienić to wiązanie inaczej. Oto przykład pokazujący, jak działa to słowo kluczowe:Jak stosować bind?
Powiązanie może pomóc w przezwyciężeniu trudności ze
this
słowem kluczowym, ponieważ ma ustalony obiekt, do któregothis
będzie się odnosił. Na przykład:Gdy funkcja zostanie przypisana do określonej
this
wartości, możemy ją przekazać, a nawet nadać właściwości innym obiektom. Wartośćthis
pozostanie taka sama.źródło
obj
obiektu są tym, że pozostały po kropce iwindow
są tym obiektem, ponieważ są skrótemwindow.custFunc()
iwindow
pozostały po kropce, były dla mnie bardzo wnikliwe.Wyjaśnię wiążę zarówno teoretycznie, jak i praktycznie
bind w javascript to metoda - Function.prototype.bind. bind jest metodą. Nazywa się to prototypem funkcji. Ta metoda tworzy funkcję, której ciało jest podobne do funkcji, na której jest wywoływana, ale „to” odnosi się do pierwszego parametru przekazanego do metody wiązania. Jego składnia to
Przykład:--
źródło
Metoda bind () tworzy nową instancję funkcji, której wartość jest powiązana z wartością przekazaną do bind (). Na przykład:
Tutaj tworzona jest nowa funkcja o nazwie objectSayColor () z sayColor () poprzez wywołanie bind () i przekazanie obiektu o. Funkcja objectSayColor () ma tę wartość równoważną o, więc wywołanie funkcji, nawet jako wywołanie globalne, powoduje wyświetlenie ciągu „niebieski”.
Referencje: Nicholas C. Zakas - PROFESJONALNY JAVASCRIPT® DLA DEWELOPERÓW INTERNETOWYCH
źródło
Tworzenie nowej funkcji poprzez wiązanie argumentów z wartościami
bind
Metoda tworzy nową funkcję z innej funkcji z jednym lub więcej argumentów związanych z określonymi wartościami, w tym niejawnythis
argument.Częściowe zastosowanie
To jest przykład częściowego zastosowania . Zwykle podajemy funkcję ze wszystkimi jej argumentami, co daje wartość. Jest to znane jako aplikacja funkcji. Stosujemy funkcję do jej argumentów.
Funkcja wyższego rzędu (HOF)
Częściowa aplikacja jest przykładem funkcji wyższego rzędu (HOF), ponieważ daje nową funkcję z mniejszą liczbą argumentów.
Wiązanie wielu argumentów
Możesz użyć
bind
do przekształcenia funkcji z wieloma argumentami w nowe funkcje.Konwersja metody instancji na funkcję statyczną
W najczęstszym przypadku użycia, wywołana z jednym argumentem,
bind
metoda utworzy nową funkcję, którejthis
wartość jest powiązana z określoną wartością. W efekcie przekształca to metodę instancji w metodę statyczną.Wdrożenie stanowego wywołania zwrotnego
Poniższy przykład pokazuje, w jaki sposób użycie powiązania
this
może umożliwić obiektowej metodzie działanie jako wywołanie zwrotne, które może z łatwością zaktualizować stan obiektu.źródło
Jak wspomniano,
Function.bind()
pozwala określić kontekst, w którym funkcja będzie wykonywana (tzn. Pozwala przekazać obiekt, do któregothis
słowo kluczowe rozpozna w treści funkcji.Kilka analogicznych metod interfejsu API zestawu narzędzi, które wykonują podobną usługę:
jQuery.proxy ()
Dojo.hitch ()
źródło
źródło
Rozważ prosty program wymieniony poniżej,
źródło
Funkcja bind tworzy nową funkcję z tym samym ciałem co funkcja, którą wywołuje. Jest wywoływana z tym argumentem. Dlaczego używamy bind fun. : gdy za każdym razem, gdy tworzona jest nowa instancja i musimy użyć pierwszej instancji początkowej, używamy bind fun. Nie możemy przesłonić bind fun. po prostu przechowuje początkowy obiekt klasy.
źródło
Innym zastosowaniem jest to, że możesz przekazać powiązaną funkcję jako argument do innej funkcji, która działa w innym kontekście wykonania.
źródło
Prosty przykład
źródło
Metoda wiązania
Implementacja wiązania może wyglądać mniej więcej tak:
Funkcja powiązania może przyjąć dowolną liczbę argumentów i zwrócić nową funkcję .
Nowa funkcja wywoła funkcję oryginalną przy użyciu
Function.prototype.apply
metody JS . Sposób stosuje pierwszy argument przekazany do funkcji docelowego jako kontekst ( ), a drugi argument tablicę metody będzie połączenie z resztą argumentów funkcji docelowego concat z argumentów do wywołania powrotu funkcja (w tej kolejności). Przykład może wyglądać mniej więcej tak:apply
this
apply
źródło
Proste objaśnienie:
bind () utwórz nową funkcję, nowe odwołanie do funkcji, która do Ciebie zwraca.
W parametrze po tym słowie kluczowym podajesz parametr, który chcesz wstępnie skonfigurować. W rzeczywistości nie wykonuje się natychmiast, po prostu przygotowuje się do wykonania.
Możesz wstępnie skonfigurować dowolną liczbę parametrów.
Prosty przykład zrozumienia wiązania:
źródło
bind jest funkcją dostępną w prototypie skryptu Java, ponieważ nazwa sugeruje, że bind jest używany do powiązania twojego wywołania funkcji z kontekstem, niezależnie od tego, z czym masz do czynienia, np .:
źródło