Detaillierte Erklärung des this-Pointing-Problems von JavaScript-Prototypobjekten

Detaillierte Erklärung des this-Pointing-Problems von JavaScript-Prototypobjekten

1. Dies deutet darauf hin

Dies verweist im Konstruktor auf das Instanzobjekt. Worauf also weist der Prototyp-Einwand hin?

wie folgt:

Funktion Student(Alter,Name){
            dieses.Alter = Alter;
            dieser.name = Name;
        }
        var das;
        Student.prototype.score = Funktion(){
            console.log('Die Kinder haben alle gute Noten!');
            das = dies;
        }
        var xl = neuer Student(18,'Kleiner Bär');
        xl.score();
        Konsole.log(das === xl);

Definieren Sie eine globale Variable, die dieser in der Score-Funktion einen Wert zuweist, lassen Sie sie in der Funktion auf this verweisen, rufen Sie die Score-Methode des Instanzobjekts auf und bestimmen Sie, ob dieses und das Instanzobjekt konsistent sind. Wenn sie konsistent sind, bedeutet dies, dass das Prototypobjekt this auf die Instanz verweist.

Das Druckergebnis ist:

Bildbeschreibung hier einfügen

Das heißt, das Prototypobjekt enthält die Methode, und dies in der Methode verweist auf den Aufrufer der Methode, also das Instanzobjekt.

2. Ändern Sie diesen Punkt

1. call()-Methode

Schreiben Sie eine einfache Funktion zum Addieren zweier Zahlen.

 Funktion fn(a,b){
           konsole.log(a+b);
            konsole.log(dies);
		 }
 fn(1,2)

Drucken Sie dies innerhalb der Funktion, rufen Sie die Funktion auf und sehen Sie, wohin dies zeigt.

Bildbeschreibung hier einfügen

Es ist ersichtlich, dass dies auf das Fensterobjekt verweist. Wenn wir möchten, dass dies auf ein neu erstelltes Objekt verweist, wie machen wir das?

Definieren Sie zunächst ein Objekt.

o = {};

Ändern Sie dann diesen Punkt durch call(), um auf das neu erstellte Objekt o zu verweisen.

 o = {
            Name: "xl"
        };
        fn.call(o,1,2);

Das Druckergebnis ist:

Bildbeschreibung hier einfügen

Dies zeigt nun auf das neu erstellte Objekt o, was bedeutet, dass die Änderung erfolgreich war.

2. apply()-Methode

Die Methoden apply() und call() sind im Grunde gleich, daher werde ich hier nicht näher darauf eingehen. Kommen wir direkt zum Code:

 Funktion fn(a,b){
           konsole.log(a+b);
            konsole.log(dies);
        }
        o = {
            Name: "xl"
        };
        fn.apply(o,[1,2]);

Es lässt sich feststellen, dass zwischen diesen beiden Methoden immer noch Unterschiede bestehen, nämlich: Die von call () akzeptierten Parameter müssen kontinuierliche Parameter sein, während die von der Methode apply () empfangenen Parameter die Form von Array-Parametern haben.

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der JavaScript-Funktion dieses Zeigeproblems
  • Detaillierte Erklärung dieser Zeigerfunktion in JS
  • Detaillierte Erklärung dieser Referenz und benutzerdefinierter Eigenschaften in JavaScript
  • Das Schlüsselwort this in JavaScript bezieht sich auf

<<:  Einführung in das Methodenattribut des Formularformulars in HTML

>>:  So entwerfen Sie MySQL-Statistikdatentabellen

Artikel empfehlen

So schreiben Sie den Stil einer CSS3-Tianzi-Rasterliste

In vielen Projekten ist es notwendig, die Funktio...

Detaillierte Erläuterung des Ausführungsprozesses der JavaScript-Engine V8

Inhaltsverzeichnis 1. V8-Quelle 2. V8-Serviceziel...

9 Möglichkeiten zum Ein- und Ausblenden von CSS-Elementen

Bei der Erstellung von Webseiten ist das Anzeigen...

Sorgen Sie für eine schnelle Website

Ist Leistung wirklich wichtig? Leistung ist wicht...

JavaScript zum Erzielen eines elastischen Navigationseffekts

In diesem Artikel wird der spezifische Code für J...

Über MySQL müssen Sie die Datentypen und Operationstabellen kennen

Datentypen und Operationen Datentabelle 1.1 MySQL...

Zusammenfassung und Analyse häufig verwendeter Docker-Befehle und Beispiele

Inhalt 1. Container-Lebenszyklusmanagement (1) Do...

Das rel-Attribut des HTML-Link-Tags

Das <link>-Tag definiert die Beziehung zwis...

So verwenden Sie Nginx als Proxy-Cache

Der Zweck der Cache-Verwendung besteht darin, den...

Vermeiden Sie den Missbrauch zum Lesen von Daten in Vue

Inhaltsverzeichnis Vorwort 1. Der Prozess der Ver...

JavaScript-Flusskontrolle (Verzweigung)

Inhaltsverzeichnis 1. Prozesskontrolle 2. Sequent...

vue-table implementiert das Hinzufügen und Löschen

In diesem Artikelbeispiel wird der spezifische Co...

WeChat-Applet implementiert Anmeldeschnittstelle

Die Anmeldeoberfläche des WeChat-Applets ist zu I...

CSS realisiert den Prozessnavigationseffekt (drei Methoden)

CSS realisiert den Prozessnavigationseffekt. Der ...