Tenho uma pergunta sobre como o ponteiro "this" é tratado em um cenário de função aninhada.
Digamos que eu insira este código de exemplo a seguir em uma página da web. Recebo um erro quando chamo a função aninhada "doSomeEffects ()". Verifiquei no Firebug e ele indica que, quando estou naquela função aninhada, o ponteiro "this" está na verdade apontando para o objeto "janela" global - o que eu não esperava. Não devo estar entendendo algo corretamente porque pensei que, como declarei a função aninhada dentro de uma função do objeto, ela deveria ter um escopo "local" em relação à função (ou seja, o ponteiro "this" estaria se referindo ao próprio objeto como como é na minha primeira declaração "if").
Quaisquer sugestões (sem trocadilhos) seriam apreciadas.
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
refere-se ao objeto no qual a função é chamada.
var self = this;
e, em seguida, referir-se à self
função interna por meio de fechamento.
doSomeEffects
não está associado a nenhum obj em particular, por isso this
é considerada a janela, a mãe de todos os elementos.