Na maioria das linguagens de programação orientadas para objectos, a palavra-chave "this" tem um significado especial. Normalmente, refere-se ao objeto que é o contexto de execução (ou seja, a instância atual do objeto). Por exemplo, utilizamos this quando nos referimos a uma propriedade de um objeto a partir do seu interior: escrevemos this.propertyName, e então o contexto é o objeto e this refere-se a ele.
'este'em JavaScript
Em JavaScript é mais complicado porque onde este depende não só da forma como a função é definida, mas também da forma de a chamar.
Veja como este funciona consoante o local e a forma de invocação.
Contexto global
Utilizado num contexto global ligado ao objeto global, como janela num navegador Web.
this; // janela
Dentro do método do objeto
Utilizado no interior de um método de objeto ligado ao objeto envolvente mais próximo. O objeto é o novo contexto do método este palavra-chave. Note-se que não se deve alterar função () para a sintaxe ES6 fun: () => this.context porque isso vai alterar o contexto.
Utilizado dentro de uma função que não tem contexto (não tem um objeto como pai) ligado ao contexto global, mesmo que a função seja definida dentro do objeto.
Note-se que utilizamos var contexto em vez de let/const contexto porque deixar e const alterar o contexto da variável incluída. var é sempre o mais próximo do contexto de execução global. deixar e const declarar variáveis apenas no âmbito de um bloco local.
var contexto = "global";
const obj = {
contexto: "object",
funA: function() {
function funB() {
const context = "function";
return this.context;
}
return funB(); // invocado sem contexto
}
};
obj.funA(); // global
Dentro da função de construtor
Utilizada no interior de uma função que é o construtor do novo objeto a ela ligado.
var contexto = "global";
função Obj() {
this.context = "Obj context";
}
const obj = new Obj();
obj.context; // Contexto do objeto
Função interna definida na cadeia de protótipos
Utilizado dentro de uma função definida no protótipo para criar um objeto ligado a ele.
chamar() e aplicar() são JavaScript funções. Com estas, um objeto pode utilizar métodos pertencentes a outro objeto. chamar() recebe argumentos separadamente onde aplicar() recebe-os como uma matriz.
este está aqui ligado ao novo contexto alterado em chamar() e aplicar() métodos.
Utilizado em qualquer manipulador de eventos (por exemplo, addeventListener, onclick, attachEvent), este é ligado ao elemento DOM ao qual o evento foi anexado.
document.querySelector(".foo").addEventListener("click", function() {
this; // refere-se ao elemento da div `foo
});
Função de seta ES6
Utilizada no interior da função de seta, está sempre ligada ao seu âmbito lexical. Na função de seta, não é possível reatribuir o este de qualquer forma.