Имеется такая фабрика объектов:
function $() {
	var res = $.proto;
	res.length = arguments.length;
	for ( var i = 0; i < arguments.length; i++ ) {
		res[i] = arguments[i];
	}
	return res;
}
$.proto = {};
Хочу переставить все объекты в обратном порядке, создаю метод, но при создании нового объекта this затирается!
$.proto.reverse = function () { // здесь this нормальный (проверка алертом)
	var res = $(); // а здесь уже пустой $()
	for ( var i = 0; i < this.length; i++ ) {
		res[i] = this[this.length - i - 1];
	}
	res.length = this.length;
	return res;
};
$( 0, 1, 2, 3, 4, 5 ).reverse(); // в любом случае пустой $()
Почему создание нового $()-объекта затирает this?
Причём есть идентичный по структуре метод extract, который достаёт элементы между позицией A и B:
$.proto.extract = function ( from, to ) {
	var res = $();
	for ( var i = 0; i < to - from; i++ ) {
		res[i] = this[from + i];
	}
	res.length = to - from;
	return res;
};
$( 0, 1, 2, 3, 4, 5 ).extract( 2, 4 ); // возвращает объект $( 2, 3 )
И тут this не затирается, всё работает как надо.
Тут так же создаю новый $(), вставляю элементы, а потом возвращаю $(e1, e2...) для дальнейшей работы.