Показать сообщение отдельно
  #1 (permalink)  
Старый 31.01.2017, 17:42
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

Меня троллит джаваскрипт
Имеется такая фабрика объектов:

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...) для дальнейшей работы.

Последний раз редактировалось Diphenyl Oxalate, 31.01.2017 в 17:47.
Ответить с цитированием