"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 > Dominando JavaScript: entendendo chamar, aplicar e vincular.

Dominando JavaScript: entendendo chamar, aplicar e vincular.

Publicado em 19/08/2024
Navegar:208

Mastering JavaScript: Understanding call, apply, and bind.

JavaScript é uma linguagem de programação versátil e poderosa que forma a espinha dorsal do desenvolvimento web moderno. À medida que os desenvolvedores progridem em sua jornada JavaScript, eles encontram conceitos mais avançados que podem aprimorar significativamente suas habilidades de codificação. Entre esses conceitos estão os métodos call, apply e bind. Esses métodos são ferramentas essenciais para manipular o contexto de execução de funções e gerenciar a palavra-chave this. Neste artigo, exploraremos esses métodos em profundidade, entenderemos suas diferenças e aprenderemos como usá-los de maneira eficaz em seus projetos JavaScript.

Compreendendo o contexto da função (isto)

Antes de mergulhar em chamar, aplicar e vincular, é crucial entender o conceito da palavra-chave this em JavaScript

isto se refere ao objeto que está executando a função atual. O valor disso depende de como a função é chamada:

  • Em um método de um objeto, this refere-se ao objeto.
  • Em uma função, this refere-se ao objeto global (janela em navegadores).
  • Em um evento, refere-se ao elemento que recebeu o evento.
  • No modo estrito ("use strict";), isso é indefinido nas funções.

No entanto, há momentos em que você precisa definir manualmente o valor disso. É aí que entram em jogo chamar, aplicar e vincular.

O método de chamada

O método call é usado para invocar uma função com um valor this específico e argumentos fornecidos individualmente. Isto é particularmente útil quando você deseja pegar emprestado um método de outro objeto ou definir o contexto dinamicamente. Sua sintaxe é a seguinte:

function.call(thisArg, arg1, arg2, ...)

Aqui está um exemplo para ilustrar como call() funciona:

const person = {
  fullName: function(city, country) {
    console.log(this.firstName   " "   this.lastName   " lives in "   city   ", "   country);
  }
};

const john = {
  firstName: "John",
  lastName: "Doe"
};

person.fullName.call(john, "New York", "USA");
// Output: John Doe lives in New York, USA

Neste exemplo, usamos call() para invocar a função fullName com john como o valor this, efetivamente pegando emprestado o método do objeto person.

O método de aplicação

O método apply() é semelhante a call(), mas aceita argumentos como um array. Sua sintaxe é:

function.apply(thisArg, [argsArray])

Vamos dar um exemplo.

const person = {
  fullName: function(city, country) {
    console.log(this.firstName   " "   this.lastName   " lives in "   city   ", "   country);
  }
};

const john = {
  firstName: "John",
  lastName: "Doe"
};

person.fullName.apply(john, ["New York", "USA"]);
// Output: John Doe lives in New York, USA

A principal diferença entre call() e apply() é como eles lidam com argumentos. call() espera que os argumentos sejam passados ​​individualmente, enquanto apply() os espera em um array.

O método de ligação

Ao contrário de call() e apply(), que invocam imediatamente a função, bind() cria uma nova função com um valor this fixo. Isto é particularmente útil para criar funções que podem ser chamadas posteriormente com um contexto específico. Sua sintaxe é:

const boundFunction = function.bind(thisArg, arg1, arg2, ...)

Aqui está um exemplo de como bind() funciona:

const person = {
  firstName: "John",
  lastName: "Doe",
  fullName: function() {
    return this.firstName   " "   this.lastName;
  }
};

const logName = function() {
  console.log(this.fullName());
};

const boundLogName = logName.bind(person);
boundLogName(); // Output: John Doe

Neste exemplo, criamos uma nova funçãoboundLogName que tem person permanentemente vinculado como seu valor this.

Comparação e casos de uso

  • call: Use quando precisar invocar uma função e controlar esse contexto imediatamente, passando argumentos individualmente.
  • apply: Semelhante a call, mas use-o quando você tiver uma série de argumentos.
  • bind: Use quando você precisar criar uma função que possa ser chamada posteriormente com um contexto this específico.

Considerações de desempenho

Embora chamar, aplicar e vincular sejam ferramentas poderosas, é importante considerar suas implicações no desempenho. bind() é geralmente mais lento que call() ou apply() porque cria uma nova função. Se você estiver trabalhando em seções críticas de desempenho do seu código, talvez você queira usar call() ou apply() em vez de bind().

Melhores práticas e armadilhas comuns

Ao usar call, apply e bind, lembre-se destas práticas recomendadas:

  • Sempre seja claro sobre o que isso deve se referir em suas funções.
  • Use call() ou apply() quando quiser invocar uma função imediatamente com um valor this específico.
  • Use bind() quando quiser criar uma nova função com um valor this fixo para uso posterior.
  • Tenha cuidado ao usar esses métodos com funções de seta, pois as funções de seta têm uma ligação this lexical que não pode ser alterada.

Uma armadilha comum é esquecer que bind() retorna uma nova função. Certifique-se de reatribuir a função vinculada ou usá-la diretamente

Conclusão

Dominar chamar, aplicar e vincular é um passo significativo para se tornar um desenvolvedor JavaScript proficiente. Esses métodos fornecem maneiras poderosas de controlar o contexto de execução da função e gerenciar a palavra-chave this. Ao compreender e usar essas ferramentas de maneira eficaz, você pode escrever códigos mais flexíveis, reutilizáveis ​​e de fácil manutenção.

À medida que você continua a explorar o JavaScript, lembre-se de que esses conceitos são apenas a ponta do iceberg. A linguagem está em constante evolução e é crucial manter-se atualizado com os recursos e práticas recomendadas mais recentes. Pratique o uso de call, apply e bind em seus projetos e logo você se verá escrevendo um código JavaScript mais elegante e eficiente.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/sagarj521/mastering-javascript-understanding-call-apply-and-bind-4ba5?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