Sobes.tech
Middle

Co dělá a k čemu je funkce function.prototype.bind?

sobes.tech AI

Odpověď od AI

function.prototype.bind vytváří novou funkci, která při volání má nastavenou hodnotu this (tedy kontext volání) a volitelně určitý počet argumentů, které předcházejí těm, jež jsou předávány při volání nové funkce.

K čemu je to užitečné:

  1. Fixace kontextu (this): Zejména užitečné při asynchronních operacích, obslužnících událostí nebo při předávání metod objektů jako callbacků, kde se může změnit standardní chování this. bind zaručuje, že metoda bude provedena v kontextu původního objektu.
  2. Částečné použití funkcí (Currying): Umožňuje vytvořit novou funkci s předem fixovanými počátečními argumenty původní funkce.

Příklad fixace kontextu:

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

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

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

// greetMethod je volána v globálním kontextu (nebo undefined v strict módu), `this` není MyClass
greetMethod(); // Výstup: Ahoj z undefined (nebo chyba)

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

// boundGreetMethod je volána s kontextem instance
boundGreetMethod(); // Výstup: Ahoj z MyClass Instance

Příklad částečného použití:

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

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

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