Баста кардани контекст бо воситаи усули bind дар JavaScript
Усули навбатӣ bind имкон медиҳад, ки контекстро ба функсия ба таври доимӣ
баст. Ин усул функсияи наверо бармегардонад, ки дар дохили
он this арзиши сахт муайяншуда дошта бошад.
Биёед дар мисол бубинем.
Бигзор мо як воридкунак дошта бошем:
<input id="elem" value="text">
Бигзор истинод ба ин воридкунак дар тағирёбандаи
elem сабт шуда бошад:
let elem = document.querySelector('#elem');
Бигзор ҳамчунин функсияи зерини
func-ро дошта бошем:
function func(param1, param2) {
console.log(this.value + param1 + param2);
}
Биёед бо ёрии bind функсияи наверо
созем, ки нусхаи функсияи func хоҳад буд,
аммо this дар он ҳамеша ба elem баробар хоҳад буд:
let newFunc = func.bind(elem);
Ҳоло дар тағирёбандаи newFunc функсия
ҳаст. Биёед онро фаро хонем, ки дар параметри аввал
'1' ва дар дуюм '2'-ро гузаронем
(ёд орам, ки дар elem воридкунаке бо value,
баробари 'text' мавҷуд аст):
newFunc('1', '2');
Биёед ҳамаро якҷоя гирем:
let elem = document.getElementById('elem');
function func(param1, param2) {
console.log(this.value + param1 + param2);
}
let newFunc = func.bind(elem);
newFunc('1', '2'); // 'text12'-ро хориҷ мекунад
Ҳатмӣ нест, ки натиҷаи коркарди
bind-ро дар функсияи нав newFunc
сабт кунем, танҳо метавонем func-ро аз нав сабт кунем. Баъд аз
ин func ҳамон функсия хоҳад буд, ки
буд, вале бо this-и сахт басташуда:
func = func.bind(elem);
Бигзор рамзи зерин дода шуда бошад:
<input id="elem" value="hello">
let elem = document.getElementById('elem');
function func(name, surname) {
console.log(this.value + ', ' + name + ' ' + surname);
}
// дар ин ҷо сохтори бо bind()-ро нависед
func('John', 'Smit'); // дар ин ҷо бояд 'hello, John Smit'-ро хориҷ кунад
func('Eric', 'Luis'); // дар ин ҷо бояд 'hello, Eric Luis'-ро хориҷ кунад
Дар ҷои ишорашуда сохтор бо
усули bind-ро чунон нависед, ки this дар дохили
функсияи func ҳамеша ба воридкунак
аз тағирёбандаи elem ишора кунад.