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.
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.
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
Quando usado dentro de uma função, depende de como a função é chamada.
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)
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"
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"
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)
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 });
JavaScript fornece métodos para definir explicitamente o valor disso usando call, apply e bind.
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.
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"
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.
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