Métodos Sudo em JavaScript

Você se cansa de escrever Array.prototype.slice.call(nodeList).forEach(fn)ou Array.prototype.forEach.call(arguments, fn)apenas porque os métodos de array nativos não suportam coleções além de arrays? Não tenha medo! Métodos Sudo para o resgate:

var sudo = (function(arr, obj) {
[
['forEach', arr, 'each'],
['map', arr],
['indexOf', arr],
['filter', arr],
['hasOwnProperty', obj, 'has'],
['toString', obj]
].forEach(function(method) {
var fn = method[1][method[0]];
obj
[method[2] || method[0]] = fn.call.bind(fn);
});
return obj;
})([], {});

Este script itty bitty permite magia como esta: sudo.each(nodeList, fn);ou sudo.map(arguments, fn);. Estes trabalham muito parecido com sublinhados ‘s e Lo-Traço s’ _.eache _.mapfunções.

O script também facilita o uso seguro de métodos de Object.prototype*:

function toType(val) {
return sudo.toString(val).slice(8, -1).toLowerCase();
}
toType
(true) //=> 'boolean'

var obj = { hasOwnProperty: function() {
return false;
} };
obj
.hasOwnProperty('hasOwnProperty') //=> false :(
sudo
.has(obj, 'hasOwnProperty') //=> true :)

Sinta-se à vontade para adicionar ou excluir quaisquer métodos que desejar para seu próprio uso. Aqui está a essência .

* Observe que não sou o gênio que inventoutoType()