JavaScript'те bind методу менен контекстти байлоо
Кийинки метод 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'sу
'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 методу менен курулуш жазыңыз,
ошондо func функциясынын ичиндеги this ар дайым
elem өзгөрмөсүнөн инпутка тиешелүү болот.