Sobes.tech
Middle

Šta radi i zašto je potrebna funkcija function.prototype.bind?

sobes.tech АИ

Одговор од АИ

function.prototype.bind kreira novu funkciju koja, kada se pozove, ima postavljenu vrednost this (tj. kontekst poziva) i, opcionalno, određeni skup argumenata koji prethode onima koji se prosleđuju prilikom poziva nove funkcije.

Za šta je korisno:

  1. Fiksiranje konteksta (this): Posebno korisno u asinhronim operacijama, rukovaocima događaja ili prilikom prosleđivanja metoda objekata kao callback-ova, gde se standardno ponašanje this može menjati. bind garantuje da će metoda biti izvršena u kontekstu originalnog objekta.
  2. Delimična primena funkcija (Currying): Omogućava kreiranje nove funkcije sa fiksiranim početnim argumentima originalne funkcije.

Primer fiksiranja konteksta:

class MyClass {
  constructor() {
    this.name = 'MyClass Instance';
  }

  greet() {
    console.log(`Zdravo od ${this.name}`);
  }
}

const instance = new MyClass();
const greetMethod = instance.greet;

// greetMethod se poziva u globalnom kontekstu (ili undefined u strict modu), `this` nije MyClass
greetMethod(); // Izlaz: Zdravo od undefined (ili greška)

const boundGreetMethod = instance.greet.bind(instance);

// boundGreetMethod se poziva sa kontekstom instance
boundGreetMethod(); // Izlaz: Zdravo od MyClass Instance

Primer delimične primene:

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

const multiplyByTwo = multiply.bind(null, 2); // Fiksiramo prvi argument na 2

console.log(multiplyByTwo(5)); // Izlaz: 10 (isto kao multiply(2, 5))