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.log
em qualquer lugar do nosso código:
Obj.log('x'); // Output : 5
Obj.log('y'); // Output : 10
Isso funciona, porque vinculamos o valor de this
ao 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 x
ou y
, porque passamos esses valores quando fizemos nossa ligação.
select = document.querySelector.bind(document)