CodeGym /Corso Java /Frontend SELF IT /Metodi call, bind e apply

Metodi call, bind e apply

Frontend SELF IT
Livello 44 , Lezione 3
Disponibile

8.1 Metodo call

I metodi call, bind e apply in JavaScript giocano un ruolo chiave nella gestione del contesto di esecuzione delle funzioni, permettendo di impostare il valore di this quando si chiamano le funzioni. Questi metodi sono particolarmente utili quando si lavora con oggetti e programmazione funzionale, fornendo strumenti potenti per la gestione flessibile del codice. Diamo un'occhiata a ciascuno di essi più da vicino e analizziamo vari esempi del loro utilizzo.

Il metodo call chiama una funzione con un dato valore di this e argomenti passati separati da virgole. Questo ci permette di specificare chiaramente il contesto in cui la funzione deve essere eseguita.

Sintassi:

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

Esempio:

In questo esempio la funzione greet viene chiamata con il contesto person, il che le permette di utilizzare la proprietà name dell'oggetto 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 Metodo apply

Il metodo apply è simile a call, ma passa gli argomenti come un array. Questo è comodo quando abbiamo un array di argomenti che vogliamo passare a una funzione.

Sintassi:

    
      func.apply(thisArg, [argsArray]);
    
  

Esempio:

Questo esempio è simile al precedente, ma gli argomenti vengono passati come 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 Metodo bind

Il metodo bind crea una nuova funzione che, quando chiamata, imposta il dato valore di this. Gli argomenti passati a bind sono fissati nella nuova funzione. Questo permette di creare funzioni con un contesto costante.

Sintassi:

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

Esempio:

In questo esempio viene creata una nuova funzione boundGreet che sarà sempre eseguita nel contesto dell'oggetto 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 Analisi dettagliata dell'uso dei metodi

1. Uso di call per ereditare metodi:

Il metodo call viene spesso utilizzato per ereditare metodi da un oggetto a un altro. Questo consente di prendere in prestito metodi e proprietà senza la necessità di un'eredità esplicita.

In questo esempio il costruttore Product viene chiamato nel contesto dell'oggetto Food, il che consente di ereditare le proprietà 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 di apply per passare un array di argomenti:

Il metodo apply è utile quando vogliamo passare un array di argomenti a una funzione che accetta parametri separati.

In questo caso l'array numbers viene passato alla funzione sum come argomenti separati.

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 di bind per creare una funzione con contesto fisso:

Il metodo bind consente di creare funzioni con un contesto costante, particolarmente utile quando si lavora con eventi e callback.

Qui la funzione getX è legata all'oggetto module con bind, permettendo di ottenere correttamente il valore x quando la funzione viene chiamata.

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 Esempi dalla vita reale

Esempio di uso di call per prendere in prestito un metodo dell'array:

In questo esempio il metodo forEach dell'array viene utilizzato per l'oggetto arguments con call.

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

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

Esempio di uso di apply per unire array:

Qui il metodo push viene utilizzato per unire due array con 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]
    
  

Esempio di uso di bind per creare una funzione parziale:

La funzione double viene creata con il primo argomento fisso a 2 utilizzando bind.

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

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