CodeGym /Kursy /Frontend SELF PL /Metody call, bind i apply

Metody call, bind i apply

Frontend SELF PL
Poziom 44 , Lekcja 3
Dostępny

8.1 Metoda call

Metody call, bind i apply w JavaScript odgrywają kluczową rolę w zarządzaniu kontekstem wykonywania funkcji, pozwalając ustawić wartość this przy ich wywoływaniu. Te metody są szczególnie przydatne podczas pracy z obiektami i programowaniem funkcyjnym, oferując potężne narzędzia do elastycznego zarządzania kodem. Spójrzmy na każdą z nich bardziej szczegółowo i przeanalizujmy różne przykłady ich użycia.

Metoda call wywołuje funkcję z określoną wartością this i argumentami przekazanymi przez przecinek. Dzięki temu możemy jednoznacznie określić kontekst, w którym funkcja powinna być wykonywana.

Składnia:

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

Przykład:

W tym przykładzie funkcja greet jest wywoływana z kontekstem person, co pozwala jej korzystać z właściwości name obiektu 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 Metoda apply

Metoda apply jest podobna do call, ale przekazuje argumenty w formie tablicy. Jest to wygodne, gdy mamy tablicę argumentów, którą chcemy przekazać do funkcji.

Składnia:

    
      func.apply(thisArg, [argsArray]);
    
  

Przykład:

Ten przykład jest analogiczny do poprzedniego, ale argumenty są przekazywane w formie tablicy.

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

      const person = { name: 'John' };

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

8.3 Metoda bind

Metoda bind tworzy nową funkcję, która przy wywołaniu ustala określoną wartość this. Argumenty przekazane do bind są ustalane w nowej funkcji. To pozwala tworzyć funkcje z stałym kontekstem.

Składnia:

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

Przykład:

W tym przykładzie tworzona jest nowa funkcja boundGreet, która zawsze będzie wykonywana w kontekście obiektu 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 Szczegółowa analiza użycia metod

1. Użycie call do dziedziczenia metod:

Metoda call jest często używana do dziedziczenia metod jednego obiektu przez inny. Pozwala to zapożyczyć metody i właściwości bez potrzeby jawnego dziedziczenia.

W tym przykładzie konstruktor Product jest wywoływany w kontekście obiektu Food, co pozwala dziedziczyć właściwości name i 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. Użycie apply do przekazywania tablicy argumentów:

Metoda apply jest wygodna, gdy chcemy przekazać tablicę argumentów funkcji, która przyjmuje pojedyncze parametry.

W tym przypadku tablica numbers jest przekazywana do funkcji sum jako oddzielne argumenty.

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

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

3. Użycie bind do tworzenia funkcji o stałym kontekście:

Metoda bind pozwala tworzyć funkcje z stałym kontekstem, co jest szczególnie przydatne przy pracy z eventami i callbackami.

W tym przykładzie funkcja getX jest powiązana z obiektem module za pomocą bind, co pozwala poprawnie uzyskać wartość x przy wywołaniu funkcji.

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 Przykłady z życia codziennego

Przykład użycia call do zapożyczania metody tablicy:

W tym przykładzie metoda forEach tablicy jest używana dla obiektu arguments za pomocą call.

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

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

Przykład użycia apply do łączenia tablic:

W tym miejscu metoda push jest używana do łączenia dwóch tablic za pomocą 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]
    
  

Przykład użycia bind do tworzenia funkcji częściowej:

Funkcja double jest tworzona z ustalonym pierwszym argumentem 2 za pomocą bind.

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

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