Баста кардани контекст бо воситаи усули bind дар JavaScript
Усули навбатӣ bind имкон медиҳад, ки контекстро ба функсия ба таври доимӣ
баст. Ин усул функсияи наверо бармегардонад, ки дар дохили
он this арзиши сахт муайяншуда дошта бошад.
Биёед дар мисол бубинем.
Бигзор мо як воридкунак дошта бошем:
html<input id="elem" value="text">
Бигзор истинод ба ин воридкунак дар тағирёбандаи
elem сабт шуда бошад:
javascriptlet elem = document.querySelector('#elem');
Бигзор ҳамчунин функсияи зерини
func-ро дошта бошем:
javascriptfunction func(param1, param2) {
console.log(this.value + param1 + param2);
}
Биёед бо ёрии bind функсияи наверо
созем, ки нусхаи функсияи func хоҳад буд,
аммо this дар он ҳамеша ба elem баробар хоҳад буд:
javascriptlet newFunc = func.bind(elem);
Ҳоло дар тағирёбандаи newFunc функсия
ҳаст. Биёед онро фаро хонем, ки дар параметри аввал
'1' ва дар дуюм '2'-ро гузаронем
(ёд орам, ки дар elem воридкунаке бо value,
баробари 'text' мавҷуд аст):
javascriptnewFunc('1', '2');
Биёед ҳамаро якҷоя гирем:
javascriptlet 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-и сахт басташуда:
javascriptfunc = func.bind(elem);
Бигзор рамзи зерин дода шуда бошад:
html<input id="elem" value="hello">javascriptlet 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 ишора кунад.