„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Javascript „dieser“ Zeiger in verschachtelten Funktionen: Wie kann die Verwirrung behoben werden?

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

Veröffentlicht am 12.11.2024
Durchsuche:614

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();

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);

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

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729291459 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3