Do que depende o valor do contexto de execução de `this` em JavaScript?
sobes.tech IA
Resposta da IA
O valor de this em JavaScript depende de como a função é chamada. Os principais cenários:
-
Contexto global: Fora de funções, em modo estrito (
'use strict'),thiséundefined. Sem modo estrito, é o objeto global (windowno navegador,globalno Node.js). -
Chamada de método de um objeto:
thisaponta para o objeto ao qual pertence o método chamado.const obj = { prop: 'valor', method: function() { // this === obj console.log(this.prop); } }; obj.method(); -
Chamada normal de uma função: Em modo estrito,
thiséundefined. Sem modo estrito, é o objeto global.function myFunction() { // em modo estrito this === undefined // sem modo estrito this === window (no navegador) console.log(this); } myFunction(); -
Construtor (
new): Usando o operadornewcom uma função construtora,thisdentro da função refere-se ao novo objeto criado.function MyClass(name) { this.name = name; // this === novo objeto } const instance = new MyClass('test'); // instance.name === 'test' -
Ligação explícita (
call,apply,bind): Os métodoscall,applyebindpermitem definir explicitamente o valor dethispara uma função.call(thisArg, arg1, arg2, ...): Chama a função definindothiscomothisArge passando argumentos individualmente.apply(thisArg, [argsArray]): Chama a função definindothiscomothisArge passando argumentos como array.bind(thisArg): Retorna uma nova função comthisligado permanentemente.
const anotherObj = { value: 42 }; function showValue() { console.log(this.value); } showValue.call(anotherObj); // Imprime 42 -
Funções arrow (
=>): As funções arrow não têm seu própriothis. O valor dethisdentro de uma função arrow herda do contexto léxico onde foi definida.const outerObj = { name: 'Outer', method: function() { const arrowFunc = () => { // this herda de method, que é chamado como método de outerObj console.log(this.name); }; arrowFunc(); } }; outerObj.method(); // Imprime 'Outer' const anotherArrowFunc = () => { // this herda do contexto global (ou undefined em modo estrito) console.log(this); }; anotherArrowFunc(); -
Manipuladores de eventos DOM: Na maioria dos casos,
thisem um manipulador de evento refere-se ao elemento DOM onde o evento ocorreu.// Exemplo no navegador const button = document.querySelector('button'); button.addEventListener('click', function() { // this === button console.log(this.tagName); });
Compreender esses mecanismos é fundamental para usar corretamente this em JavaScript.