Sobes.tech
Junior

O que é a palavra-chave 'this'?

sobes.tech IA

Resposta da IA

this é uma palavra-chave em JavaScript que se refere ao objeto no contexto em que o código atual é executado. O seu valor é determinado pela forma como a função é chamada.

As principais formas de definir this:

  • Contexto global: Fora de uma função, this refere-se ao objeto global (window no navegador, global no Node.js).
  • Chamada normal de uma função: Em modo não estrito (strict mode), this também refere-se ao objeto global (ou undefined se a função for chamada como método de um objeto, mas esse objeto for null ou undefined). Em modo estrito, this é igual a undefined.
  • Método de um objeto: Se a função for chamada como método de um objeto (ou seja, através do operador ponto .), this refere-se ao objeto que possui o método.
  • Construtor: Ao usar o operador new, this refere-se à nova instância do objeto criada.
  • Métodos call(), apply(), bind(): Estes métodos permitem definir explicitamente o valor de this ao chamar a função. bind() devolve uma nova função com this ligado, enquanto que call() e apply() chamam a função com o this especificado.
  • Funções arrow: As funções arrow não têm o seu próprio this. this numa função arrow é herdado lexicalmente do âmbito circundante em que foi definida.

Exemplos:

// Contexto global
console.log(this === window); // true (no navegador)

// Chamada normal de uma função
function myFunction() {
  console.log(this);
}
myFunction(); // window (em modo não estrito)

// Método de um objeto
const myObject = {
  myMethod: function() {
    console.log(this);
  }
};
myObject.myMethod(); // myObject

// Construtor
function MyConstructor() {
  this.value = 10;
  console.log(this);
}
const instance = new MyConstructor(); // objeto instância

// call(), apply(), bind()
function greet(name) {
  console.log("Hello, " + name + "! My name is " + this.name);
}
const person = { name: "Alice" };
greet.call(person, "Bob"); // Hello, Bob! My name is Alice
greet.apply(person, ["Bob"]); // Hello, Bob! My name is Alice
const boundGreet = greet.bind(person);
boundGreet("Bob"); // Hello, Bob! My name is Alice

// Função arrow
const arrowFunction = () => {
  console.log(this);
};
arrowFunction(); // window (se definida no contexto global)

Compreender como this é determinado em diferentes contextos é fundamental para escrever código JavaScript correto.