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

Praxis der Bereitstellung von in Python geschriebenen Webanwendungen mit Docker

Inhaltsverzeichnis 1. Docker installieren 2. Code...

Detaillierte Erklärung der neuen Hintergrundeigenschaften in CSS3

Bisher kannten wir mehrere Hintergrundattribute i...

MySQL-Abfrage – Erlernen grundlegender Abfrageoperationen

Vorwort MySQL ist das beliebteste relationale Dat...

Detaillierte Beschreibung der Unicode-Signatur-BOM

Unicode-Signatur-BOM – Was ist die BOM? BOM ist di...

DNS-Konfigurationsmethode für den Linux Domain Name Service

Was ist DNS Der vollständige Name von DNS lautet ...

So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen

Mit zunehmender Anzahl von Besuchen steigt der Dr...

JavaScript zum Erzielen eines einfachen Drag-Effekts

In diesem Artikel wird der spezifische JavaScript...

CSS3 ändert den Bildlaufleistenstil des Browsers

Hinweis: Diese Methode ist nur auf WebKit-basiert...

Der praktische Prozess des Login-Status-Managements im vuex-Projekt

Inhaltsverzeichnis Werkzeug: Anmeldeszenario: übe...