Javascript "dieser" Zeiger innerhalb der verschachtelten Funktion

Ich habe eine Frage im Bezug auf den "this" - Zeiger werden in einer verschachtelten Funktion Szenario.

Sagen, dass ich einfügen das folgende Beispiel-code in eine web-Seite. Ich erhalte eine Fehlermeldung, wenn ich rufen Sie die verschachtelte Funktion "doSomeEffects()". Überprüfte ich in Firebug, und es zeigt, dass, wenn ich in dieser geschachtelten Funktion, der Zeiger "this" ist eigentlich Hinweis auf den globalen "window" - Objekt - das hatte ich nicht erwartet. Ich muss nicht Verständnis etwas richtig, weil ich dachte, da ich erklärte, die verschachtelte Funktion innerhalb einer Funktion des Objektes, es müsste "local" Umfang in Bezug auf die Funktion (d.h. der Zeiger "this" würde sich auf das Objekt selbst mag, wie es in meinem ersten "if" - Anweisung).

Alle Zeiger (kein Wortspiel beabsichtigt) würde geschätzt.

var std_obj = {
  options : { rows: 0, cols: 0 },
  activeEffect : "none",
  displayMe : function() {

    //the 'this' pointer is referring to the std_obj
    if (this.activeEffect=="fade") { }

    var doSomeEffects = function() {

      //the 'this' pointer is referring to the window obj, why?
      if (this.activeEffect=="fade") { }

    }

    doSomeEffects();   
  }
};

std_obj.displayMe();
Kommentar zu dem Problem
Was genau ist Ihre Frage ? Kommentarautor: Sarfraz
Wenn verwendet, innerhalb einer Funktion this bezieht sich auf das Objekt, auf dem die Funktion aufgerufen wird. Kommentarautor: approxiblue
Was Sie tun können, in den äußeren Umfang ist so etwas wie var self = this; und dann siehe self die innere Funktion über die Schließung. Kommentarautor: Kai
doSomeEffects ist nicht mit einem obj in allem, also this, wird angenommen, dass die Fenster, die Mutter aller Elemente. Kommentarautor: approxiblue
@JoJoeDad Wie kann ich Diplomatisch sagen? Aber die Antwort chuckj unten ist mit Abstand die Antwort auf Ihre Frage. Um wirklich zu verstehen, was Los ist, Lesen Sie Ausführungskontext, scope-chain und keyword. Und von den blicken von einigen der Antworten hier, andere Leute Lesen sollten Sie auch. Ich versuche, Sie zu evangelisieren gute javascript. Deshalb nehme ich die Zeit zu geben, diese links. Kommentarautor: onefootswill

InformationsquelleAutor der Frage JoJoeDad | 2012-03-10

Schreibe einen Kommentar