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();
this
refiere al objeto en el que se invoca la función.
var self = this;
y luego hacer referencia self
en la función interna a través del cierre.
doSomeEffects
no está asociado con ningún obj en particular, por lo que this
se supone que es la ventana, la madre de todos los elementos.