Middle
Функсияи function.prototype.bind чӣ мекунад ва барои чӣ лозим аст?
sobes.tech AI
Ҷавоб аз AI
function.prototype.bind эҷод мекунад функсияи нав, ки ҳангоми даъват кардан, арзиши this (яъне, контексти даъват) муқаррар мешавад ва, ба хоҳиш, маҷмӯи аргументҳои муайяншуда, ки пеш аз онҳое, ки ҳангоми даъвати функсияи нав дода мешаванд, гузошта мешаванд.
Барои чӣ лозим аст:
- Тасҳеҳ кардани контекст (this): Хусусан дар амалҳои асинхронӣ, ҳодисаҳои идоракунӣ ё ҳангоми гузоштани методҳои объектҳо ҳамчун callback, ки дар он ҷо рафтори стандартии
thisметавонад тағйир ёбад.bindкафолат медиҳад, ки метод дар контексти объекти аслӣ иҷро шавад. - Барқарор кардани қисмии функсияҳо (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))