"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Compreendendo a palavra-chave `this` em JavaScript

Compreendendo a palavra-chave `this` em JavaScript

Publicado em 2024-08-07
Navegar:799

Understanding the `this` Keyword in JavaScript

A palavra-chave this em JavaScript pode ser um dos conceitos mais confusos para novos desenvolvedores. O seu valor pode mudar dependendo do local onde é utilizado, sendo crucial compreender o seu comportamento em diferentes contextos. Este artigo irá desmistificar a palavra-chave this explorando seu uso em vários cenários.

O que é isso?

Em JavaScript, isso se refere ao contexto em que uma função é executada. Ele fornece uma maneira de acessar propriedades e métodos de um objeto de dentro do próprio objeto.

Contexto Global

Quando usado no contexto global (fora de qualquer função ou objeto), refere-se ao objeto global. Em um navegador da web, o objeto global é window.

console.log(this); // In a browser, this will log the window object

Contexto da função

Quando usado dentro de uma função, depende de como a função é chamada.

Chamada de Função Regular

Em uma chamada de função regular, this refere-se ao objeto global (ou indefinido no modo estrito).

function showThis() {
  console.log(this);
}

showThis(); // Logs window (or undefined in strict mode)

Chamada de método

Quando uma função é chamada como método de um objeto, isso se refere ao próprio objeto.

const person = {
  name: 'Alice',
  greet: function() {
    console.log(this.name);
  }
};

person.greet(); // Logs "Alice"

Contexto do Construtor

Quando uma função é usada como construtor com a palavra-chave new, isso se refere à instância recém-criada.

function Person(name) {
  this.name = name;
}

const bob = new Person('Bob');
console.log(bob.name); // Logs "Bob"

Funções de seta

As funções de seta têm um comportamento diferente. Eles não têm esse contexto próprio; em vez disso, eles herdam isso do contexto lexical circundante.

const obj = {
  name: 'Carol',
  regularFunction: function() {
    console.log(this.name);
  },
  arrowFunction: () => {
    console.log(this.name);
  }
};

obj.regularFunction(); // Logs "Carol"
obj.arrowFunction();   // Logs undefined (or the global object in non-strict mode)

Manipuladores de eventos

Em manipuladores de eventos, refere-se ao elemento que recebeu o evento.

document.getElementById('myButton').addEventListener('click', function() {
  console.log(this); // Logs the button element
});

Vinculação Explícita

JavaScript fornece métodos para definir explicitamente o valor disso usando call, apply e bind.

ligue e inscreva-se

Os métodos call e apply permitem que você invoque uma função com um valor this especificado.

function introduce() {
  console.log(`Hello, my name is ${this.name}`);
}

const person = { name: 'Dave' };

introduce.call(person); // Logs "Hello, my name is Dave"
introduce.apply(person); // Logs "Hello, my name is Dave"

A diferença entre call e apply é como eles lidam com argumentos. call recebe argumentos individualmente, enquanto apply os aceita como um array.

vincular

O método bind cria uma nova função que, quando chamada, tem seu valor this definido como o valor fornecido.

function introduce() {
  console.log(`Hello, my name is ${this.name}`);
}

const person = { name: 'Eve' };

const boundIntroduce = introduce.bind(person);
boundIntroduce(); // Logs "Hello, my name is Eve"

Conclusão

Compreender a palavra-chave this é essencial para dominar o JavaScript. Ao reconhecer como isso se comporta em diferentes contextos, você pode escrever um código mais previsível e sustentável. Esteja você trabalhando com métodos, construtores ou funções de seta, saber como isso funciona o ajudará a evitar armadilhas comuns e a aproveitar seu poder de maneira eficaz.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/mdhassanpatwary/understanding-the-this-keyword-in-javascript-12ea?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3