Sobes.tech
Middle

Čo robí a na čo je funkcia function.prototype.bind?

sobes.tech AI

Odpoveď od AI

function.prototype.bind vytvára novú funkciu, ktorá pri volaní má nastavenú hodnotu this (t.j. kontext volania) a, voliteľne, určitý súbor argumentov, ktoré predchádzajú tým, ktoré sú odovzdané pri volaní novej funkcie.

Na čo je to užitočné:

  1. Fixácia kontextu (this): Obzvlášť užitočné pri asynchrónnych operáciách, obsluhách udalostí alebo pri odovzdávaní metód objektov ako callbackov, kde sa štandardné správanie this môže meniť. bind zabezpečí, že metóda bude vykonaná v kontexte pôvodného objektu.
  2. Čiastočné použitie funkcií (Currying): Umožňuje vytvoriť novú funkciu s pevne stanovenými počiatočnými argumentmi pôvodnej funkcie.

Príklad fixácie kontextu:

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

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

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

// greetMethod sa volá v globálnom kontexte (alebo undefined v strict režime), `this` nie je MyClass
greetMethod(); // Výstup: Ahoj od undefined (alebo chyba)

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

// boundGreetMethod sa volá s kontextom instance
boundGreetMethod(); // Výstup: Ahoj od MyClass Instance

Príklad čiastočného použitia:

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

const multiplyByTwo = multiply.bind(null, 2); // Fixujeme prvý argument na 2

console.log(multiplyByTwo(5)); // Výstup: 10 (rovnaké ako multiply(2, 5))