Vinculando contexto através do método bind em JavaScript
O próximo método bind permite vincular
o contexto a uma função permanentemente. Como resultado,
este método retorna uma nova função, dentro da qual
this terá um valor rigidamente definido.
Vamos ver um exemplo.
Suponha que temos um input:
<input id="elem" value="text">
Suponha que a referência a este input esteja armazenada na variável
elem:
let elem = document.querySelector('#elem');
Suponha que também temos a seguinte função
func:
function func(param1, param2) {
console.log(this.value + param1 + param2);
}
Vamos usar bind para criar uma nova
função, que será uma cópia da função func,
mas this nela sempre será igual a elem:
let newFunc = func.bind(elem);
Agora, na variável newFunc há uma
função. Vamos chamá-la, passando no primeiro
parâmetro '1' e no segundo '2'
(lembrando que em elem está o input com value
igual a 'text'):
newFunc('1', '2');
Vamos juntar tudo:
let elem = document.getElementById('elem');
function func(param1, param2) {
console.log(this.value + param1 + param2);
}
let newFunc = func.bind(elem);
newFunc('1', '2'); // exibirá 'text12'
Não é necessário armazenar o resultado do
bind em uma nova função newFunc,
pode-se simplesmente sobrescrever func. Após
isso, func será a mesma função de antes, mas com o this
rigidamente vinculado:
func = func.bind(elem);
Suponha o seguinte código:
<input id="elem" value="hello">
let elem = document.getElementById('elem');
function func(name, surname) {
console.log(this.value + ', ' + name + ' ' + surname);
}
// escreva aqui a construção com bind()
func('John', 'Smit'); // deve exibir 'hello, John Smit'
func('Eric', 'Luis'); // deve exibir 'hello, Eric Luis'
Escreva no local indicado a construção com
o método bind de forma que this dentro
da função func sempre aponte para o input
da variável elem.