Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida com Bind

let $ = document.querySelector.bind(document)

Nesse trecho do código do curso de ES6 eu não entendi muito bem a utilidade do bind.

Já não está especificado que a função querySelector está agindo sobre o “document” no início da expressão? Por quê colocar document de novo com o bind?

2 respostas
solução!

Olá Felipe, tudo bem com você?

Foi o que o instrutor explicou, quando utilizamos em qualquer lugar do nosso código o document.querySelector temos que o contexto do this é de fato o document, entretanto quando atribuímos a uma variável estamos mudando o contexto léxico, por isso quando tentamos fazer apenas (você pode testar no console do firefox) :

let $ = document.querySelector

O navegador nos da uma exceção:

'querySelector' called on an object that does not implement interface Document.

Indicando que $ não implementaDocument, para solucionar essa exceção teríamos que definir o $ como sendo um atributo de document da seguinte maneira:

Document.$

Ai poderíamos utilizar o $ = document.querySelector pois agora esta associado, entretanto é uma maneira muito forte de fazer a associação, e por isso utilizamos o bind pois devolvemos uma referência de Documentassociada a função querySelector

Agora uma curiosidade, se você fizer $ no console do Chrome ele nos devolvera o seguinte:

ƒ $(id) {
  // eslint-disable-next-line no-restricted-properties
  return document.getElementById(id);
}

Essa é uma outra maneira que podemos trabalhar sem ter que trabalhar com o bind pois ai temos o contexto da função :)

Conseguiu compreender ? Qualquer coisa estou a disposição!

Entendi. Muito obrigado.