Detaillierte Analyse dieser Richtung in JavaScript und wie die Richtung geändert werden kann

Detaillierte Analyse dieser Richtung in JavaScript und wie die Richtung geändert werden kann

Das

Schauen wir uns wie üblich zuerst den Code an:

Verfahren

Funktionstest () {
    konsole.log(dies);
}

Bildbeschreibung hier einfügen

Im Objekt

Person={
  Name: „Zhang San“,
  essen:Funktion(){
      console.log(dies)
  }
}

Bildbeschreibung hier einfügen

In einer Methode bezieht sich dies auf das Objekt, zu dem die Methode gehört. Da es sich bei der ersten um eine Methode im Fenster handelt, wird das Fenster gedruckt, und die Eat-Methode ist eine Person-Methode, sodass das Objekt Person gedruckt wird.

Man kann also erkennen, dass die alleinige Verwendung von „this“ in der Konsole das globale Objekt darstellt.

Bildbeschreibung hier einfügen

Versteckt dies

In Objekten können Sie diese vorab einzeln deklarieren:

var Person1 = {
    Name: „Zhang San“,
    Alter:18
}
var Person2 = {
    Name:"Li Si",
    Alter:19
}

Das wäre sehr mühsam zu schreiben, Sie können also wie folgt das Konzept der Java-Klassen lernen:

var Person = Funktion (Name, Alter) {
    dieser.name=Name,
    this.age=Alter
       
}
var Person1=new Person("Person",18);
var Person2=neue Person("Li Si",19);

Bildbeschreibung hier einfügen

Tatsächlich ist in new ein return this versteckt. Wenn Sie new nicht verwenden, werden Sie feststellen, dass das neu erstellte Objekt nicht zurückgegeben wird.

Bildbeschreibung hier einfügen

Jetzt vervollständigen wir es:

var Person = Funktion (Name, Alter) {
    dieser.name=Name,
    this.age=Alter
    gib dies zurück;
}
var Person1=new Person("Person",18);
var Person2=neue Person("Li Si",19);

Bildbeschreibung hier einfügen

Auf diese Weise können Sie den Effekt sogar vortäuschen:

var Person = Funktion (Name, Alter) {
    var das={};
    dieser.name=Name,
    that.age=Alter
    gib das zurück;
}
var Person1=new Person("Person",18);
var Person2=neue Person("Li Si",19);

Bildbeschreibung hier einfügen

Strikter Modus

Dies hat ein magisches Verhalten im strikten und nicht strikten Modus

Funktion test() {
  gib dies zurück;
}

# Wenn „use strict“ vor js hinzugefügt wird, bedeutet dies den strikten Modus „use strict“;
Funktion test() {
  gib dies zurück;
}

Bildbeschreibung hier einfügen

Dies zeigt, dass in einer Funktion im nicht strikten Modus der Besitzer der Funktion standardmäßig daran gebunden ist. Daher kann der globale Wert gedruckt werden, aber im strengen Modus ist die Funktion nicht daran gebunden, sodass dies nicht definiert ist.

Sie können dies ändern, um zu verweisen auf

Schauen Sie sich zuerst den Code an

var Person = Funktion (Name, Alter) {
    dieser.name=Name,
    this.age=Alter,
    dies.spaß = funktion(){
         console.log("drucken",dieser.name);
        }
}
var Person1=new Person("Person",18);
var Person2=neue Person("Li Si",19);




Bildbeschreibung hier einfügen

Es ist ersichtlich, dass dies auf den Wert eines Fensters und nicht auf den Wert im Methodentest zeigt, aber einige Schlüsselwörter können den Zeiger ändern.

Bildbeschreibung hier einfügen

Sie können sehen, wer das Objekt vor der Methode ist und wer das „this“ im Aufruf ist, aber es kann geändert werden, z. B. durch die Verwendung der Schlüsselwörter „call“, „apply“ und „bind“.

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Aus dem Obigen können wir erkennen, dass „call“ und „apply“ sehr ähnlich sind, aber „bind“ die Funktion nicht sofort ausführt und in () eingeschlossen werden muss.

Wenn Sie jedoch Parameter eingeben, werden Sie feststellen, dass „call“ und „apply“ immer noch unterschiedlich sind, aber beide Objekte enthalten müssen. Schließlich verweist dies auf das Objekt.

Schlagwörter Direkter Methodenaufruf Parameter
Anruf Führt automatisch die verwendete Methode aus Beide können Parameter im folgenden Format haben: obj1.obj1Fun.call( obj2, Parameter 1, Parameter 1 ………………);
anwenden Führt automatisch die verwendete Methode aus Beide können Parameter annehmen. Das Format ist wie folgt: obj1.obj1Fun.apply([obj2, Parameter 1, Parameter 1 ………………]); Verglichen mit den Parametern des Aufrufs sind seine Parameter in [] eingeschlossen.
binden Die Methode wird nicht automatisch ausgeführt, Sie müssen +() hinzufügen, um sie aufzurufen. Beide können Parameter im folgenden Format annehmen: Beide können Parameter im folgenden Format annehmen: obj1.obj1Fun.bind( [obj2, Parameter 1, Parameter 1 ………………])(); Die Parameter von apply sind die gleichen, außer dass +() folgen muss, um aufgerufen zu werden

Damit ist dieser Artikel mit der eingehenden Analyse der Richtung von this in JavaScript und der Änderung der Richtung abgeschlossen. Weitere relevante Inhalte zu JavaScript this direction finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung dieser Referenz und benutzerdefinierter Eigenschaften in JavaScript
  • Detaillierte Erklärung des this-Zeigeproblems in JavaScript
  • Detaillierte Erklärung der Funktionsklassifizierung und Beispiele für diese Zeigerfunktion in Javascript
  • Detaillierte Erklärung dieses Zeigeproblems in der JavaScript-Funktion
  • JavaScript-Grundlagen dieser Verweisung

<<:  IDEA-vollständiger Code zum Herstellen einer Verbindung mit einer MySQL-Datenbank und Durchführen von Abfragevorgängen

>>:  Anwendung von CSS3-Animationseffekten in Aktivitätsseiten

Artikel empfehlen

Detaillierte Analyse des temporären JDBC- und MySQL-Tablespace

Hintergrund Temporäre Tablespaces werden verwende...

Beispiel für eine MySQL-DML-Sprachoperation

Zusätzliche Erklärung, Fremdschlüssel: Verwenden ...

Grundlegende Hinweise zu HTML und CSS (unbedingt für das Frontend lesen)

Als ich zum ersten Mal mit HTML in Berührung kam,...

Eine kurze Diskussion über die Semantik von HTML und einige einfache Optimierungen

1. Was ist Semantisierung? Erklärung zum Bing-Wör...

Analyse des Konfigurationsprozesses der Nginx-HTTP-Integritätsprüfung

Passive Prüfung Mit passiven Integritätsprüfungen...

Parameter, um Iframe transparent zu machen

<iframe src="./ads_top_tian.html" all...

So verwenden Sie Spark und Scala zum Analysieren von Apache-Zugriffsprotokollen

Installieren Zuerst müssen Sie Java und Scala ins...

Detaillierte Erklärung zur Verwendung der Vue.js-Renderfunktion

Vue empfiehlt in den meisten Fällen die Verwendun...

So verkleinern Sie das Stammverzeichnis des XFS-Partitionsformats in Linux

Inhaltsverzeichnis Vorwort Systemumgebung Aktuell...

So fügen Sie Vite-Unterstützung zu alten Vue-Projekten hinzu

1. Einleitung Ich habe vor zwei Jahren ein Projek...

Fünf Möglichkeiten zum automatischen Seitensprung in HTML

Im vorherigen Artikel haben wir drei gängige Meth...

Verschiedene korrekte Haltungen zur Verwendung von Umgebungsvariablen in Webpack

Inhaltsverzeichnis Schreiben Sie vor Geschäftscod...

Diagramm des Datenübertragungsprozesses beim dritten TCP-Handshake

Die Prozesspakete mit dem SYN-Flag im RFC793-Doku...