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

Erläuterung der Docker Compose-Netzwerkeinstellungen

Grundlegende Konzepte Standardmäßig erstellt Comp...

Lösung für die falsche Ausrichtung des Eingabecursors in Chrome, Firefox und IE

Detaillierte Erklärung zur Fehlplatzierung des Ein...

CentOS7-Konfiguration Alibaba Cloud Yum-Quellmethodencode

Öffnen Sie den Centos Yum-Ordner Geben Sie den Be...

svg+css oder js zum Erstellen eines Tick-Animationseffekts

Mein Chef hatte mich gebeten, ein Programm zu ers...

Detaillierte Erklärung der Beziehung zwischen Vue und VueComponent

Der folgende Fall überprüft die Wissenspunkte der...

CSS realisiert den Prozessnavigationseffekt (drei Methoden)

CSS realisiert den Prozessnavigationseffekt. Der ...

Miniprogramm zur Implementierung des Slider-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung der Probleme bei der Installation von MySQL 5.7.19 unter Linux

Als ich MySQL zum ersten Mal auf meiner virtuelle...

MySQL-Abfragebaumstrukturmethode

Inhaltsverzeichnis MySQL-Abfragebaumstruktur 1. Ü...

Ursachen und Lösungen für die Front-End-Ausnahme 502 Bad Gateway

Inhaltsverzeichnis 502 Bad Gateway Fehlerbildung ...

Zwei Möglichkeiten, damit IE6 Bilder im PNG-24-Format normal anzeigt

Methode 1: Bitte fügen Sie den folgenden Code nach...

HTML+jQuery zur Implementierung einer einfachen Anmeldeseite

Inhaltsverzeichnis Einführung Öffentlicher Code (...