Simplifique seu código usando function.bind

Function.prototype.bind – é uma ótima função que pode ajudá-lo a limpar seu código. Vejo alguns exemplos comuns, quando é útil. Primeiro são funções como moveUp / moveDown, aumentaValue / diminuiValue etc. Exemplo abstrato:

$arrowUp.on('click', function(){
currentPosition
+= 1;
applyChanges
();
});

$arrowDown
.on('click', function(){
currentPosition
-= 1;
applyChanges
();
});

Vamos simplificar este código usando .bind:

function move(diff) {
currentPosition
+= diff;
applyChanges
();
};
$arrowUp
.on('click', move.bind(null, 1));
$arrowDown
.on('click', move.bind(null, -1));

Parece melhor, certo?

O segundo exemplo é a chamada de função com parâmetros em callbacks. Por exemplo, setTimeout / setInterval:

$(window).load(function(){
setTimeout
(loadSomething, 5000);
});

Podemos usar bind e alterá-lo para uma linha:

$(window).load(setTimeout.bind(null, loadSomething, 500));

Outro exemplo do angular.js. Queríamos armazenar algumas preferências do usuário em localStorage e o código era como:

$scope.$watch('language', function(value){
$localStorage
.set('language', value);
});

$scope
.$watch('timezone', function(value){
$localStorage
.set('timezone', value);
});
...

E nós o refatoramos:

$scope.$watch('language', $localStorage.set.bind(null, 'language'));
$scope
.$watch('timezone', $localStorage.set.bind(null, 'timezone'));
...

É mais fácil de ler, tem uma aparência melhor e torna seu código menor.

E não se esqueça de adicionar polyfill para navegador antigo para usar esta função!