Tengo una pregunta sobre cómo se trata el puntero "this" en un escenario de función anidada.
Digamos que inserto el siguiente código de muestra en una página web. Recibo un error cuando llamo a la función anidada "doSomeEffects ()". Revisé Firebug e indica que cuando estoy en esa función anidada, el puntero "this" en realidad apunta al objeto de "ventana" global, lo cual no esperaba. No debo estar entendiendo algo correctamente porque pensé que desde que declaré la función anidada dentro de una función del objeto, debería tener un alcance "local" en relación con la función (es decir, el puntero "this" se referiría al objeto en sí como cómo está en mi primera declaración "si").
Se agradecería cualquier sugerencia (sin juego de palabras).
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();
thisrefiere al objeto en el que se invoca la función.
var self = this;y luego hacer referencia selfen la función interna a través del cierre.
doSomeEffectsno está asociado con ningún obj en particular, por lo que thisse supone que es la ventana, la madre de todos los elementos.