Heim > Web-Frontend > js-Tutorial > Hauptteil

Javascript-Zeiger „dieser' in verschachtelten Funktionen: Wie kann die Verwirrung behoben werden?

Patricia Arquette
Freigeben: 2024-10-19 06:45:02
Original
751 Leute haben es durchsucht

Javascript

Javascript „this“-Zeiger im Rätsel um verschachtelte Funktionen

In einem Webentwicklungsszenario das Verhalten des „this“-Zeigers innerhalb verschachtelter Funktionen kann rätselhaft sein. Betrachten Sie den folgenden Code:

var std_obj = {
  options: {rows: 0, cols: 0},
  activeEffect: "none",
  displayMe: function() {
    // this refers to std_obj
    if (this.activeEffect == "fade") {}

    var doSomeEffects = function() {
      // this surprisingly refers to window object
      if (this.activeEffect == "fade") {}
    }

    doSomeEffects();
  }
};

std_obj.displayMe();
Nach dem Login kopieren

Im obigen Code zeigt der „this“-Zeiger innerhalb der verschachtelten Funktion „doSomeEffects()“ unerwartet auf das „window“-Objekt. Dieses Verhalten widerspricht der Erwartung, dass die verschachtelte Funktion den Umfang der äußeren Funktion erben würde, wobei sich „this“ auf „std_obj“ bezieht.

Grundlegendes zum Aufruf und Umfang von Javascript-Funktionen

Das Verhalten von „this“ in Javascript-Funktionen hängt davon ab, wie die Funktion aufgerufen wird. Im Allgemeinen gibt es drei Möglichkeiten:

  1. Methodenaufruf: someThing.someFunction(arg1, arg2, argN)
  2. Function.call-Aufruf: someFunction.call(someThing, arg1, arg2, argN)
  3. Function.apply-Aufruf: someFunction.apply(someThing, [arg1, arg2, argN])

In all diesen Aufrufen ist das „this“-Objekt „someThing“. Der Aufruf einer Funktion ohne führendes übergeordnetes Objekt (z. B. doSomeEffects() im Beispiel) führt jedoch im Allgemeinen dazu, dass das „this“-Objekt auf das globale Objekt gesetzt wird, das in den meisten Browsern das „window“-Objekt ist.

Im Beispielcode wird die verschachtelte Funktion „doSomeEffects()“ ohne übergeordnetes Objekt aufgerufen, sodass sie den globalen Bereich erbt und ihr „this“-Zeiger auf das „window“-Objekt zeigt. Aus diesem Grund beobachten Sie das unerwartete Verhalten.

Um sicherzustellen, dass die verschachtelte Funktion Zugriff auf den Bereich „std_obj“ hat, können Sie sie mit der Methode Function.call() mit dem Objekt „std_obj“ als aufrufen erstes Argument:

var doSomeEffects = function() {
  // this now refers to std_obj
  if (this.activeEffect == "fade") {}
}

doSomeEffects.call(std_obj);
Nach dem Login kopieren

Das Verständnis der subtilen Nuancen „dieses“ Zeigerverhaltens in Javascript ist entscheidend für die Erstellung robuster und wartbarer Anwendungen.

Das obige ist der detaillierte Inhalt vonJavascript-Zeiger „dieser' in verschachtelten Funktionen: Wie kann die Verwirrung behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!