CodeGym /Cursos /Frontend SELF PT /Métodos call, bind e apply

Métodos call, bind e apply

Frontend SELF PT
Nível 44 , Lição 3
Disponível

8.1 Método call

Os métodos call, bind e apply em JavaScript desempenham um papel crucial na gestão do contexto de execução das funções, permitindo definir o valor de this ao chamar funções. Esses métodos são especialmente úteis ao trabalhar com objetos e programação funcional, fornecendo ferramentas poderosas para gerenciar o código de forma flexível. Bora dar uma olhada em cada um deles mais detalhadamente e explorar alguns exemplos de uso.

O método call invoca uma função com um valor de this especificado e argumentos passados em formato separado por vírgulas. Isso nos possibilita especificar explicitamente o contexto no qual a função deve ser executada.

Sintaxe:

    
      func.call(thisArg, arg1, arg2 ...);
    
  

Exemplo:

Neste exemplo, a função greet é chamada com o contexto de person, permitindo que ela utilize a propriedade name do objeto person.

JavaScript
    
      function greet(greeting, punctuation) {
        console.log(greeting + ', ' + this.name + punctuation);
      }

      const person = { name: 'John' };

      greet.call(person, 'Hello', '!'); // Output: Hello, John!
    
  

8.2 Método apply

O método apply é semelhante ao call, mas passa os argumentos como um array. Isso é conveniente quando temos um array de argumentos que queremos passar para uma função.

Sintaxe:

    
      func.apply(thisArg, [argsArray]);
    
  

Exemplo:

Este exemplo é semelhante ao anterior, mas os argumentos são passados como um array.

JavaScript
    
      function greet(greeting, punctuation) {
        console.log(greeting + ', ' + this.name + punctuation);
      }

      const person = { name: 'John' };

      greet.apply(person, ['Hello', '!']); // Output: Hello, John!
    
  

8.3 Método bind

O método bind cria uma nova função que, ao ser chamada, define um valor específico para this. Os argumentos passados para bind são fixados na nova função. Isso permite criar funções com um contexto fixo.

Sintaxe:

    
      const boundFunc = func.bind(thisArg, arg1, arg2 ...);
    
  

Exemplo:

Neste exemplo, é criada uma nova função boundGreet, que sempre será executada no contexto do objeto person.

JavaScript
    
      function greet(greeting, punctuation) {
        console.log(greeting + ', ' + this.name + punctuation);
      }

      const person = { name: 'John' };

      const boundGreet = greet.bind(person, 'Hello');
      boundGreet('!'); // Output: Hello, John!
    
  

8.4 Análise detalhada do uso dos métodos

1. Uso de call para herança de métodos:

O método call é frequentemente usado para herdar métodos de um objeto para outro. Isso permite emprestar métodos e propriedades sem a necessidade de herança explícita.

Neste exemplo, o construtor Product é chamado no contexto do objeto Food, permitindo herdar as propriedades name e price.

JavaScript
    
      function Product(name, price) {
        this.name = name;
        this.price = price;
      }

      function Food(name, price, category) {
        Product.call(this, name, price);
        this.category = category;
      }

      const cheese = new Food('Cheese', 5, 'Dairy');
      console.log(cheese); // Output: Food { name: 'Cheese', price: 5, category: 'Dairy' }
    
  

2. Uso de apply para passar um array de argumentos:

O método apply é útil quando queremos passar um array de argumentos para uma função que aceita parâmetros separados.

Neste caso, o array numbers é passado para a função sum como argumentos separados.

JavaScript
    
      function sum(a, b, c) {
        return a + b + c;
      }

      const numbers = [1, 2, 3];
      console.log(sum.apply(null, numbers)); // Output: 6
    
  

3. Uso de bind para criar função com contexto fixo:

O método bind permite criar funções com um contexto fixo, o que é especialmente útil ao lidar com eventos e callbacks.

Aqui, a função getX é vinculada ao objeto module com bind, permitindo obter corretamente o valor de x ao chamar a função.

JavaScript
    
      const module = {
        x: 42,
        getX: function() {
          return this.x;
        }
      };

      const unboundGetX = module.getX;
      console.log(unboundGetX()); // Output: undefined

      const boundGetX = unboundGetX.bind(module);
      console.log(boundGetX()); // Output: 42
    
  

8.5 Exemplos da vida real

Exemplo de uso de call para empréstimo de método de array:

Neste exemplo, o método forEach do array é usado para o objeto arguments com call.

JavaScript
    
      function printArguments() {
        Array.prototype.forEach.call(arguments, function(item) {
          console.log(item);
        });
      }

      printArguments(1, 2, 3); // Output: 1, 2, 3
    
  

Exemplo de uso de apply para unir arrays:

Aqui, o método push é usado para unir dois arrays com apply.

JavaScript
    
      const array1 = [1, 2, 3];
      const array2 = [4, 5, 6];

      Array.prototype.push.apply(array1, array2);
      console.log(array1); // Output: [1, 2, 3, 4, 5, 6]
    
  

Exemplo de uso de bind para criar função parcial:

A função double é criada com o primeiro argumento fixado em 2 com bind.

JavaScript
    
      function multiply(a, b) {
        return a * b;
      }

      const double = multiply.bind(null, 2);
      console.log(double(5)); // Output: 10
    
  
1
Опрос
CRUD e trabalho com API,  44 уровень,  3 лекция
недоступен
CRUD e trabalho com API
CRUD e trabalho com API
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION