De los documentos de MDN en Function.prototype.bind()
:
El método bind () crea una nueva función que, cuando se llama, tiene esta palabra clave establecida en el valor proporcionado, con una secuencia dada de argumentos que precede a cualquier proporcionada cuando se llama a la nueva función.
¡¿Entonces que significa eso?!
Bueno, tomemos una función que se vea así:
var logProp = function(prop) {
console.log(this[prop]);
};
Ahora, tomemos un objeto que se vea así:
var Obj = {
x : 5,
y : 10
};
Podemos vincular nuestra función a nuestro objeto de esta manera:
Obj.log = logProp.bind(Obj);
Ahora, podemos ejecutar Obj.log
en cualquier parte de nuestro código:
Obj.log('x'); // Output : 5
Obj.log('y'); // Output : 10
Esto funciona porque vinculamos el valor de this
nuestro objeto Obj
.
Donde realmente se pone interesante, es cuando no solo unes un valor this
, sino también su argumento prop
:
Obj.logX = logProp.bind(Obj, 'x');
Obj.logY = logProp.bind(Obj, 'y');
Ahora podemos hacer esto:
Obj.logX(); // Output : 5
Obj.logY(); // Output : 10
A diferencia de Obj.log
, no tenemos que pasar x
o y
, porque pasamos esos valores cuando hicimos nuestro enlace.
select = document.querySelector.bind(document)