So implementieren Sie Call, Apply und Binding in nativem JS

So implementieren Sie Call, Apply und Binding in nativem JS

1. Implementieren Sie den Anruf

Schritt:

  1. Legen Sie die Funktion als Eigenschaft des Objekts fest.
  2. Weisen Sie dies der Funktion zu und übergeben Sie die angegebenen Parameter, um die Funktion auszuführen.
  3. Löschen Sie diese Funktion nach der Ausführung;
  4. Wenn keine Parameter übergeben werden, wird standardmäßig auf das Fenster verwiesen.
Function.prototype.mycall = Funktion (Kontext, ...Argumente) {
    //Beurteilen Sie, ob es sich um eine Funktion handelt. Wenn es keine Funktion ist, wird ein Fehler gemeldet, if (typeof this !== "function") {
        throw new Error("keine Funktion");
    }
    Kontext = Kontext || Fenster;
    Kontext.fn = dies;
    const res = Kontext.fn(...args);
    lösche context.fn;
    Rückgabewert;
}

Testcode:

varname = "Li Hui", Alter = 25;
var obj = {
    Name: "Zhou Guo",
    objAge: dieses.Alter,
    myFun: Funktion (fm, zu) {
        console.log(`Name: ${this.name}, Alter: ${this.age}, von: ${fm}, bis: ${to}`)
    }
};
var Person = {
    Name: "jüngerer Bruder",
    Alter: 12,
};

Function.prototype.mycall = Funktion (Kontext, ...Argumente) {
    //Beurteilen Sie, ob es sich um eine Funktion handelt. Wenn es keine Funktion ist, wird ein Fehler gemeldet, if (typeof this !== "function") {
        throw new Error("keine Funktion");
    }
    Kontext = Kontext || Fenster;
    Kontext.fn = dies;
    const res = Kontext.fn(...args);
    lösche context.fn;
    Rückgabewert;
}

obj.myFun.mycall(Person, „Chengdu“, „Renshou“); //Name: jüngerer Bruder, Alter: 12, von: Chengdu, nach: Renshou

2. Implementieren Sie apply

Function.prototype.myApply = Funktion (Kontext, ...Argumente) {
    //Beurteilen Sie, ob es sich um eine Funktion handelt. Wenn es keine Funktion ist, wird ein Fehler gemeldet, if (typeof this !== "function") {
        throw new Error("keine Funktion");
    }
    Kontext = Kontext || Fenster;
    Kontext.fn = dies;
    args = args && args[0] || [];
    const Ergebnis = Kontext.fn(...args);
    lösche context.fn;
    Ergebnis zurückgeben;
}

Testcode:

obj.myFun.myApply(person, ["Chengdu", "Renshou"]); //Name: jüngerer Bruder, Alter: 12, von: Chengdu, nach: Renshou

3. Implementieren Sie Bind

Die Methode bind() bindet hauptsächlich eine Funktion an ein Objekt. bind() erstellt eine Funktion und der Wert dieses Objekts im Funktionskörper wird an den Wert des ersten Parameters gebunden, der an bind() übergeben wird.

Methode 1: Verwenden von „Apply“

Funktion.prototype.myBind = Funktion () {
    let self = this; //Ursprüngliche Funktion speichern let context = [].shift.call(arguments); //Den this-Kontext speichern, der gebunden werden muss let args = [...arguments]; //Die restlichen übergebenen Parameter in ein Array umwandeln return function () { //Eine neue Funktion zurückgeben self.apply(context,[].concat.call(args,[...arguments]));
    }
}

ES6 vereinfacht es:

Function.prototype.myBind = Funktion (Kontext, ...args1) {
        return (...args2) => { //Pfeilfunktion zurückgeben, diese ist an das Funktionsobjekt gebunden, das diese Methode aufruft. Kontext = Kontext || Fenster;
            return this.apply(context, args1.concat(args2));//Parameter zusammenführen}
    }

Methode 2: Call and Apply nicht verwenden

Kombinieren Sie den obigen Code mit dem handgeschriebenen JS-Apply-Code:

Function.prototype.myBind = Funktion (Kontext, ...args1) {
    return (...args2) => { //Pfeilfunktion zurückgeben, diese ist an das Funktionsobjekt gebunden, das diese Methode aufruft. Kontext = Kontext || Fenster;
        Kontext.fn = dies;
        const args = args1.concat(args2);
        const res = Kontext.fn(...args);
        lösche context.fn;
        Rückgabewert;
    }
}

Testcode:

obj.myFun.myBind(person, "Chengdu", "Renshou")(); //Name: jüngerer Bruder, Alter: 12, von: Chengdu, nach: Renshou

Oben sind die Details, wie natives JS Aufruf, Anwenden und Binden implementiert. Weitere Informationen zur JS-Implementierung von Aufruf, Anwenden und Binden finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Beispielcode für die Verwendung von JS zur einfachen Implementierung der Methoden „Apply“, „Call“ und „Bind“
  • Detaillierte Erläuterung der Implementierungsprinzipien von call, apply und bind in JavaScript
  • So implementieren Sie eine einfache Version von Call, Apply, Binding mit 50 Zeilen Javascript-Code
  • Detaillierte Erklärung des Codes zur Implementierung von call, bind und apply in Javascript

<<:  So setzen Sie das MySQL-Root-Passwort unter Windows zurück

>>:  So verwenden Sie tcpdump zum Erfassen von Paketen im Linux-System

Artikel empfehlen

Vue implementiert die Internationalisierung der Sprachumschaltung für Webseiten

1. Grundlegende Schritte 1: Installieren Sie yarn...

So führen Sie Linux-Shell-Befehle in Docker aus

Um einen Shell-Befehl in Docker auszuführen, müss...

Rundungsvorgang des Datums-/Uhrzeitfelds in MySQL

Inhaltsverzeichnis Vorwort 1. Hintergrund 2. Simu...

Diskussion über die numerische Begrenzung des OL-Elements im HTML-Dokument

Im Allgemeinen ist es unwahrscheinlich, dass Sie ...

Detaillierte Einführung in CSS-Schrift-, Text- und Listeneigenschaften

1. Schrifteigenschaften Farbe, gibt die Farbe des...

Transkript der Implementierung berechneter Vue-Eigenschaften

In diesem Artikel wird das Implementierungszeugni...

MySQL 5.7.17 neuestes Installationstutorial mit Bildern und Text

mysql-5.7.17-winx64 ist die neueste Version von M...

React + ts realisiert den sekundären Verknüpfungseffekt

In diesem Artikel wird der spezifische Code von R...

So speichern Sie „false“ oder „true“ in MySQL

Boolescher MySQL-Wert, speichert „false“ oder „tr...

Vier praktische Tipps für JavaScript-String-Operationen

Inhaltsverzeichnis Vorwort 1. Eine Zeichenfolge t...

Allgemeine Betriebsbefehle von MySQL im Linux-System

Aufschlag: # chkconfig --list Alle Systemdienste ...

Erkennen Sie den CSS-Ladeeffekt nach dem Klicken auf die Schaltfläche

Da es in dem Produkt meiner Firma eine Schaltfläc...

So stellen Sie Confluence und Jira-Software in Docker bereit

Version: centos==7.2 jdk==1.8 Zusammenfluss == 6....