Ich habe eine Frage dazu, wie der Zeiger "this" in einem verschachtelten Funktionsszenario behandelt wird.
Angenommen, ich füge den folgenden Beispielcode in eine Webseite ein. Ich erhalte eine Fehlermeldung, wenn ich die verschachtelte Funktion "doSomeEffects ()" aufrufe. Ich habe Firebug eingecheckt und es zeigt an, dass der Zeiger "this" in dieser verschachtelten Funktion tatsächlich auf das globale "window" -Objekt zeigt - was ich nicht erwartet hatte. Ich muss etwas nicht richtig verstehen, weil ich dachte, da ich die verschachtelte Funktion innerhalb einer Funktion des Objekts deklariert habe, sollte sie in Bezug auf die Funktion einen "lokalen" Bereich haben (dh der "this" -Zeiger würde sich wie auf das Objekt selbst beziehen wie es in meiner ersten "wenn" -Anweisung ist).
Alle Hinweise (kein Wortspiel beabsichtigt) wäre dankbar.
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();
this
Bezieht sich bei Verwendung innerhalb einer Funktion auf das Objekt, für das die Funktion aufgerufen wird.
var self = this;
und dann self
in der inneren Funktion durch Schließen darauf verweisen .
doSomeEffects
ist nicht mit einem bestimmten Objekt verbunden, daher this
wird angenommen, dass es das Fenster ist, die Mutter aller Elemente.