A partir dos documentos MDN sobre Function.prototype.bind():
O método bind () cria uma nova função que, quando chamada, tem sua palavra-chave definida com o valor fornecido, com uma sequência de argumentos fornecida antes de qualquer fornecida quando a nova função é chamada.
Então, o que isso significa?!
Bem, vamos assumir uma função que se parece com isso:
var logProp = function(prop) {
console.log(this[prop]);
};
Agora, vamos pegar um objeto que se parece com isso:
var Obj = {
x : 5,
y : 10
};
Podemos vincular nossa função ao nosso objeto assim:
Obj.log = logProp.bind(Obj);
Agora, podemos executar Obj.logem qualquer lugar do nosso código:
Obj.log('x'); // Output : 5
Obj.log('y'); // Output : 10
Isso funciona, porque vinculamos o valor de thisao nosso objeto Obj.
O que realmente interessa é quando você não apenas vincula um valor para this, mas também seu argumento prop:
Obj.logX = logProp.bind(Obj, 'x');
Obj.logY = logProp.bind(Obj, 'y');
Agora podemos fazer isso:
Obj.logX(); // Output : 5
Obj.logY(); // Output : 10
Ao contrário de Obj.log, não temos que passar xou y, porque passamos esses valores quando fizemos nossa ligação.
select = document.querySelector.bind(document)