Wie funktioniert 'call' in JavaScript?

8

Ich habe eine Frage zu 'call' in Javascript.

%Vor%

so..wenn ich 'call' als humanWithHand.call (this) verwende, was passiert intern?

kopiert die humanWithHand-Variable ihre Eigenschaften und Member in den Prototyp der menschlichen Variablen?

    
Moon 01.09.2011, 02:34
quelle

2 Antworten

7

.call() setzt den Wert this und ruft dann die Funktion mit den Argumenten auf, die Sie an .call() übergeben haben. Sie verwenden .call() , anstatt die Funktion direkt aufzurufen, wenn Sie den this -Wert innerhalb der aufgerufenen Funktion setzen möchten, anstatt ihn auf das zu setzen, was Javascript normalerweise festlegen würde.

.apply() ist eine Schwesterfunktion. Es kann auch den this -Wert setzen, und es kann Argumente in einem Array verwenden, damit es verwendet werden kann, wenn Sie versuchen, eine variable Argumentliste von einem anderen Funktionsaufruf zu übergeben oder wenn Sie eine programmatische Argumentliste konstruieren unterschiedliche Anzahl von Argumenten abhängig von der Situation.

    
jfriend00 01.09.2011, 02:38
quelle
9

Yehuda Katz hat eine gute Beschreibung von JavaScript's Function#call Methode. Sein Writeup sollte Ihre Frage beantworten und daneben viele weitere Fragen.

Wenn Sie eine Funktion direkt aufrufen, verwenden Sie die allgemeine Syntax:

%Vor%

Dann ist this innerhalb des Funktionsaufrufs egal was this außerhalb des Funktionsaufrufs ist. Im Browser ist this außerhalb von Funktionsaufrufen standardmäßig window . Innerhalb des Funktionsaufrufs wie oben ist this auch standardmäßig window .

Wenn Sie eine Funktion mit der Methodenaufrufsyntax aufrufen:

%Vor%

Dann ist this innerhalb des Funktionsaufrufs das Objekt links von der ganz rechten Periode: in diesem Fall bar .

Wir können diese Situation mit call simulieren.

Wenn Sie eine Funktion außerhalb eines Objekts einrichten und sie mit this innerhalb des auf ein Objekt gesetzten Funktionsaufrufs aufrufen möchten, können Sie Folgendes tun:

%Vor%

Sie können diese Technik auch verwenden, um Argumente zu übergeben:

%Vor%     
yfeldblum 01.09.2011 02:37
quelle

Tags und Links