CodeGym /Cursos /Frontend SELF ES /Métodos call, bind y apply

Métodos call, bind y apply

Frontend SELF ES
Nivel 44 , Lección 3
Disponible

8.1 Método call

Los métodos call, bind y apply en JavaScript juegan un papel clave en la gestión del contexto de ejecución de funciones, permitiendo establecer el valor de this al llamar funciones. Estos métodos son especialmente útiles al trabajar con objetos y programación funcional, proporcionando herramientas poderosas para la gestión flexible del código. Vamos a echar un vistazo más detallado a cada uno de ellos y explorar varios ejemplos de su uso.

El método call llama a una función con un valor de this especificado y argumentos pasados en forma de lista. Esto nos permite especificar explícitamente el contexto en el que se debe ejecutar la función.

Sintaxis:

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

Ejemplo:

En este ejemplo, la función greet se llama con el contexto person, lo que le permite usar la propiedad name del 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

El método apply es similar a call, pero pasa los argumentos como un array. Esto es útil cuando tenemos un array de argumentos que queremos pasar a la función.

Sintaxis:

    
      func.apply(thisArg, [argsArray]);
    
  

Ejemplo:

Este ejemplo es similar al anterior, pero los argumentos se pasan como un 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

El método bind crea una nueva función que, cuando se llama, establece el valor de this que se le ha proporcionado. Los argumentos pasados a bind se establecen en la nueva función. Esto facilita la creación de funciones con un contexto permanente.

Sintaxis:

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

Ejemplo:

En este ejemplo, se crea una nueva función boundGreet que siempre se ejecutará en el contexto del 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álisis detallado del uso de los métodos

1. Uso de call para heredar métodos:

El método call se utiliza frecuentemente para heredar métodos de un objeto a otro. Esto permite tomar prestados métodos y propiedades sin la necesidad de herencia directa.

En este ejemplo, el constructor Product se llama en el contexto del objeto Food, lo que permite heredar las propiedades name y 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 pasar un array de argumentos:

El método apply es útil cuando queremos pasar un array de argumentos a una función que acepta parámetros separados.

En este caso, el array numbers se pasa a la función 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 crear una función con contexto fijo:

El método bind permite crear funciones con un contexto permanente, lo cual es especialmente útil al trabajar con eventos y callbacks.

Aquí, la función getX se enlaza al objeto module usando bind, lo que permite obtener correctamente el valor de x al llamar a la función.

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 Ejemplos de la vida real

Ejemplo de uso de call para tomar prestado el método de un array:

En este ejemplo, el método forEach de un array se usa para el objeto arguments usando call.

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

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

Ejemplo de uso de apply para combinar arrays:

Aquí, el método push se utiliza para combinar dos arrays usando 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]
    
  

Ejemplo de uso de bind para crear una función parcial:

La función double se crea con el primer argumento fijado en 2 usando bind.

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

      const double = multiply.bind(null, 2);
      console.log(double(5)); // Output: 10
    
  
1
Cuestionario/control
CRUD y trabajo con API, nivel 44, lección 3
No disponible
CRUD y trabajo con API
CRUD y trabajo con API
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION