чуть не забыл, понадобятся еще служебные функции.
в исходнике реализована функция $a которая используется по всей библиотеке. Нам интересна ее способность преобразовывать аргументы функции в массив. записал так
function args2array(obj)
{
var al = obj.length;
var args = new Array(al);
while (al--)
args[al] = obj[al];
return args;
};
Еще есть функции проверяющие тип объекта.
Реализация их не очень интересна, однако для чистоты эксперимента выкладываю код тоже
Интерес вызывает isElement и isRegExp так как похоже для корректной работы потребуются дополнительные действия, но об этом позже.
function isElement(obj)
{
return (obj && obj.nodeType && obj.nodeType == 1) ? true : false;
};
function isRegExp(obj)
{
return (obj && obj.constructor === RegExp);
};
function isString(obj)
{
return (typeof obj == 'string');
};
function isNumber(obj)
{
return (typeof obj == 'number');
};
function isBoolean(obj)
{
return (typeof obj == 'boolean');
};
function isNull(obj)
{
return (obj === null);
};
function isUndefined(obj)
{
return (obj === 'undefined' || obj === undefined || obj === 'unknown');
};
function isArray(obj)
{
return (obj && obj.constructor === Array);
};
function isSimple(obj)
{
return (isString(obj) || isNumber(obj) || isBoolean(obj) || isRegExp( obj));
};
function isFunction(obj)
{
return (obj && obj.constructor === Function);
};
function isObject(obj)
{
return (obj && !(isArray( obj) || isFunction( obj) || isSimple( obj)));
};