Sobrecarga de função JavaScript

Este é um exemplo simples de sobrecarga de função em JavaScript usando encerramentos para sobrecarregar um método Users.find (), podemos sobrecarregar o método com um nome ou um nome, sobrenome.

Agradecimentos a Steve Jansen http://steve-jansen.github.io/ por este exemplo

(function(){
function findAll() {
// Find all users...
}

function findByFullName(name) {
// Find a user by name
}

function findBySurname(first, last) {
// Find a user by first and last name
}

Users.prototype.find = function find() {
if (arguments.length === 0)
return findAll.apply(this);

if (arguments.length === 1 and typeof(arguments[1]) === 'string')
return findByFullName.apply(this, arguments);

// by default, search using first and last name
return findBySurname.apply(this, arguments);
}
})();