Dies, binden, rufen und anwenden in JavaScript | Erklärt

Dies, binden, rufen und anwenden in JavaScript | Erklärt
Binden, Anruf und Anwendung sind wirklich nützliche und spezielle Methoden, mit denen wir mit der Referenz die Ausleihe von Merkmalen und Methoden von einem Objekt zum anderen erreichen könnenDas”. Dies ist ein wenig fortgeschrittenes Thema. Deshalb werden wir die Dinge für Sie langsam aufnehmen und jedes Minute -Detail mit Beispielen erklären.

JavaScript und viele andere Programmiersprachen verwenden das Schlüsselwort Das Um die Referenz des übergeordneten Objekts/der Klasse auf seine Funktionen und Methoden in ihnen zu übergeben. Während die Methoden binden, aufrufen und anwenden, arbeiten Sie an der Übergabe von Referenzen auf Ausleihen von Attributen von einem Objekt zu einem anderen. Die Feature Bind, Call und Apply wurde in JavaScript in der ECMA2015 -Version hinzugefügt.

Die Referenz "this"

Das Schlüsselwort Das hat eine sehr spezifische Bedeutung in JavaScript, es bezieht sich auf das Objekt, das die Funktion aufruft. Wenn wir mit einer Konstruktormethode arbeiten, dann ist das Schlüsselwort Das würde sich auf die Klasse und ihre Eigenschaften beziehen, wenn wir dann mit einigen DOM -Elementen arbeiten Das Das Schlüsselwort würde sich auf die globalen Werte des DOM beziehen.

Um dies zu demonstrieren, erstellen Sie das folgende Objekt mit den folgenden Zeilen:

var person =
Name: "John Doe",
Alter: 25,
Bezeichnung: "Auditor",
printName: function ()
Konsole.Protokoll (dies.Name);
,
;

Wie Sie sehen können, haben wir in der Objektperson eine Funktion PrintName die den Namen der Person und im Inneren der drucken Konsole.Protokoll() Wir können sehen, dass wir die Linie haben:

Das.Name;

Das Das Schlüsselwort erstellt einen Verweis auf das Objekt und fordert den Compiler an, den „Namen“ von diesem bestimmten Objekt abzurufen.

Methoden anrufen und anwenden

Forderung Und anwenden kann beide gleichzeitig definiert werden, weil sie fast genau die gleiche Arbeitsmechanik haben. Aufrufen und Anwenden werden für Funktionen für Funktionen verwendet, Funktionen für Funktionen zur Verwendung der Funktion eines anderen Objekts und die Referenz eines anderen Objekts verwenden.

Um dieses Konzept besser zu verstehen, erstellen Sie zwei verschiedene Objekte mit den folgenden Codezeilen:

var person1 =
Name: "John Doe",
Alter: 25,
Bezeichnung: "Auditor",
printName: function ()
Konsole.Protokoll (dies.Name);
,
;
var person2 =
Name: "Baba Yaga",
Alter: 22,
Bezeichnung: "arbeitslos",
;

Wie Sie im Code-Snippet sehen können, haben wir fast die gleiche Struktur sowohl der Objekte als auch der gleichen Schlüsselwertpaare, mit Ausnahme der Tatsache Person1 hat die Funktion PrintName während Person2 nicht. Aber wenn Sie den „Namen“ der "der" ausdrucken möchten Person2 Objekt können Sie dies tun, indem Sie die Methode „PrintName“ aus der verwenden Person1 Objekt und für die “DasReferenz, Sie geben die Referenz des Objekts über Person2.

Syntax des Anrufs und bewerben Sie sich:

Die Syntax dieser beiden Methoden ist fast identisch:

Für die Anrufmethode ist die Syntax als:

OBJ1.Funktion.rufen Sie (RefferenceofObject2, arg1 arg2, arg3…);

Für die Anwendung der Methode ist die Syntax als:

OBJ1.Funktion.anwenden (RefferenceofObject2, [arg1, arg2, arg3,…]);

Notiz: Wenn die Funktion, die Sie ausleihen, einige zusätzliche Argumente benötigt, dann in der Anrufmethode Sie geben die durch ein Komma getrennten Argumente über und im Fall der Antragsmethode verabschieden Sie zusätzliche Argumente als eine Anordnungsliste.

Verwenden von Anruf- und Anwenden von Methoden

Wenn wir zu unserem ursprünglichen Problem zurückkehren, können wir das verwenden “PrintNameFunktion von der “Person1Objekt, den Namen der auszudrucken Person2 Objekt unter Verwendung der folgenden Codezeile:

Person1.PrintName.Rufen Sie an (Person2);

Wenn Sie den obigen Befehl ausführen, sehen Sie die folgende Ausgabe:

Ebenso können Sie die verwenden anwenden() Methode zum gleichen Zweck mit dem Code:

Person1.PrintName.bewerben (Person2);

Aber was ist, wenn die printName () Die Funktion nimmt einige Argumente auf wie:

PrintName: Funktion (Stadt, Geschwister)
Konsole.log ('$ this.Name von $ City hat $ selings selings ');
,

Für diesen Fall verwenden Sie die Anruffunktion mit der folgenden Codezeile:

Person1.PrintName.Rufen Sie an (Person2, "New York", 4);

Der komplette Code -Snippet lautet wie:

var person1 =
Name: "John Doe",
Alter: 25,
Bezeichnung: "Auditor",
PrintName: Funktion (Stadt, Geschwister)
Konsole.log ('$ this.Name von $ City hat $ selings selings ');
,
;
var person2 =
Name: "Baba Yaga",
Alter: 22,
Bezeichnung: "arbeitslos",
;
Person1.PrintName.Rufen Sie an (Person2, "New York", 4);

Wenn Sie den folgenden Code ausführen, erhalten Sie die Ausgabe als:

Wie Sie sehen können, konnten Sie die Argumente mit der Anrufmethode übergeben. Sie können dies mit dem verwenden, indem Sie die verwenden anwenden() Methode auch mit dem folgenden Code -Snippet:

var person1 =
Name: "John Doe",
Alter: 25,
Bezeichnung: "Auditor",
PrintName: Funktion (Stadt, Geschwister)
Konsole.log ('$ this.Name von $ City hat $ selings selings ');
,
;
var person2 =
Name: "Baba Yaga",
Alter: 22,
Bezeichnung: "arbeitslos",
;
Person1.PrintName.bewerben (Person2, ["New York", 4]);

Notiz: Um Argumente an die geliehene Funktion durch die zu übergeben anwenden() Methode verwenden wir ein Array, das die Argumente enthält.

Wenn Sie diesen Code ausführen, erhalten Sie die gleiche identische Ausgabe wie:

Aber was ist, wenn Sie keine Funktion von einem Objekt ausleihen möchten? Hier die Bindungsmethode kommt ins Spiel.

Die Bind () -Methode

im Gegensatz zu den Forderung Und anwenden Methoden, binden Methoden werden verwendet, um eine Kopie einer Funktion zu erstellen und dann die Funktion als Attribut des Objekts zu kopieren, damit die Funktion zu einem späteren Zeitpunkt verwendet werden kann.

Syntax der Bind -Methode

Die Syntax ist wie:

var newfunctionName = Objekt1.Funktion.bind (RefereCetoObject2);

Hinweis: Die Bind -Methode gibt eine Funktion zurück, die repliziert wird.

Um dies zu demonstrieren, ändern wir den Code auf diese Weise aus dem obigen Beispiel:

var person1 =
FirstName: "John",
LastName: "Doe",
Alter: 25,
printfullName: function ()
Konsole.Protokoll (dies.FirstName + "" + dies.Familienname, Nachname);
,
;
var person2 =
FirstName: "Baba",
Lastname: "Yaga",
Alter: 25,
;

Wenn Sie nun eine Kopie der Funktion erstellen möchten printfullname aus dem Objekt Person1 und machen Sie es zu einem Attribut des Objekts Person2 Dann können Sie dies tun, indem Sie die folgende Codezeile verwenden:

var printmyname = Person11.printfullname.binden (Person2);

Mit dieser Linie haben Sie "gebunden”Eine Attributfunktion printmyname mit dem Objekt Person2, und Sie können es mit dem Befehl aufrufen:

printmyname ()

Hinweis: Sie rufen es nicht mit dem an Person2 Objekt mit der DOT-Operation, weil der Verweis auf die Person2 Objekt ist bereits “gebunden”Zur Funktion.

Der komplette Code -Snippet lautet wie:

var person1 =
FirstName: "John",
LastName: "Doe",
Alter: 25,
printfullName: function ()
Konsole.Protokoll (dies.FirstName + "" + dies.Familienname, Nachname);
,
;
var person2 =
FirstName: "Baba",
Lastname: "Yaga",
Alter: 25,
;
var printmyname = Person11.printfullname.binden (Person2);
printmyname ();

Wenn Sie diesen Code -Snippet ausführen, erhalten Sie die folgende Ausgabe:

Da Sie gehen, haben Sie eine Funktion von dupliziert von Person1 Objekt, die Referenz von übergeben Person2 Objekt und speicherte es als separate Funktion.

Abschluss

Rufen Sie an, binden Sie Und anwenden Methoden sind komplizierte Methoden, die verwendet werden, um mit der Referenz der Objekte zu spielen und Ihnen dabei zu helfen. Um die Details dieser Funktionen zu verstehen, müssen wir wissen, was das Schlüsselwort Das bedeutet in JavaScript und wie die Referenzierung in JS funktioniert. Sie haben über das Arbeitsarbeiten erfahren, Methoden anwenden, anwenden und binden.