Ho una domanda su come viene trattato il puntatore "this" in uno scenario di funzione annidata.
Supponiamo che inserisca il seguente codice di esempio in una pagina web. Ricevo un errore quando chiamo la funzione nidificata "doSomeEffects ()". Ho controllato in Firebug e indica che quando sono in quella funzione annidata, il puntatore "this" sta effettivamente puntando all'oggetto "finestra" globale - cosa che non mi aspettavo. Non devo capire qualcosa correttamente perché ho pensato, poiché ho dichiarato la funzione annidata all'interno di una funzione dell'oggetto, dovrebbe avere uno scope "locale" in relazione alla funzione (cioè il puntatore "this" si riferirebbe all'oggetto stesso come com'è nella mia prima dichiarazione "if").
Qualsiasi suggerimento (nessun gioco di parole) sarebbe apprezzato.
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
riferisce all'oggetto su cui viene richiamata la funzione.
var self = this;
e poi fare riferimento self
nella funzione interna tramite chiusura.
doSomeEffects
non è associato a nessun oggetto in particolare, quindi this
si presume che sia la finestra, la madre di tutti gli elementi.