Имеется такая фабрика объектов:
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...) для дальнейшей работы.