Sobes.tech
Middle

Функсияи function.prototype.bind чӣ мекунад ва барои чӣ лозим аст?

sobes.tech AI

Ҷавоб аз AI

function.prototype.bind эҷод мекунад функсияи нав, ки ҳангоми даъват кардан, арзиши this (яъне, контексти даъват) муқаррар мешавад ва, ба хоҳиш, маҷмӯи аргументҳои муайяншуда, ки пеш аз онҳое, ки ҳангоми даъвати функсияи нав дода мешаванд, гузошта мешаванд.

Барои чӣ лозим аст:

  1. Тасҳеҳ кардани контекст (this): Хусусан дар амалҳои асинхронӣ, ҳодисаҳои идоракунӣ ё ҳангоми гузоштани методҳои объектҳо ҳамчун callback, ки дар он ҷо рафтори стандартии this метавонад тағйир ёбад. bind кафолат медиҳад, ки метод дар контексти объекти аслӣ иҷро шавад.
  2. Барқарор кардани қисмии функсияҳо (Currying): Имкон медиҳад, ки функсияи нав бо аргументҳои ибтидоии муайяншудаи функсияи аслӣ сохта шавад.

Масалан барои тасҳеҳ кардани контекст:

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

  greet() {
    console.log(`Салом аз ${this.name}`);
  }
}

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

// greetMethod дар контексти глобалӣ (ё undefined дар режими қатъӣ) даъват мешавад, `this` нест MyClass
greetMethod(); // Натиҷа: Салом аз undefined (ё хато)

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

// boundGreetMethod бо контексти instance даъват мешавад
boundGreetMethod(); // Натиҷа: Салом аз MyClass Instance

Масалан барои қисмии истифода:

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

const multiplyByTwo = multiply.bind(null, 2); // Аргументи аввалро 2 муқаррар мекунем

console.log(multiplyByTwo(5)); // Натиҷа: 10 (муодил ба multiply(2, 5))