 
			
				28.03.2013, 12:36
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.02.2011 
					
					
					
						Сообщений: 351
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		А то, что length не обновляется - это не беда. Работа с коллекцией всеравно идет через методы, а не напрямую.
	 | 
 
	
 
 Так что все-таки надо, массив? Методы массива? Коллекция массивом не является. А свойство length важно не только само по себе, оно необходимо чтобы правильно работали методы массива:
 
	
 
	| 
		
			Сообщение от rgl
			
		
	 | 
 
	| 
		Дело в том, что у полученного объекта отсутствует свойство length (точнее оно присутствует, но не свое, а наследуемое, а там оно ноль). Из-за этого методы массива не работают.
	 | 
 
	
 
 Вот, например:
 
var test = {};
test[0] = "a";
test[1] = "bb";
test[2] = "ccc";
test.length = 2;
alert( Array.prototype.slice.call( test, 0 ) );
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 13:21
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Тлен 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2010 
					
					
					
						Сообщений: 6,601
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Если уж извращаться - то можно эмулировать геттером, они вроде в ие 9+ поддерживаются уже. Примерно так, если не думать об оптимизации): 
var test = {
    get length(){
        var j = 0;
        for(var i in this)if(!isNaN(i) && i > j) j = +i ;
        return j+1
    }
};
test[0] = "a";
test[1] = "bb";
test[25] = "ccc";
alert(test.length)
 
alert( Array.prototype.slice.call( test, 0 ) );
 
		
	
		
		
		
		
		
			
				__________________ 
				29375, 35 
 
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось Aetae, 28.03.2013 в 13:24.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 14:29
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.02.2011 
					
					
					
						Сообщений: 351
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Aetae, 
Только функция должна быть чуть посложнее - нужно отсекать дробные числа, слишком большие числа, и много чего еще:
 
var test = {
    get length(){
        var j = 0;
        for(var i in this)if(!isNaN(i) && i > j) j = +i ;
        return j+1
    }
};
test[0] = "a";
test[1] = "bb";
test[1e100] = "ccc";
var test2 = [];
test2[0] = "a";
test2[1] = "bb";
test2[1e100] = "ccc";
 
alert( test.length + " | " + test2.length );
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 21:20
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		недавно плагин жукверевский к Zepto подключал. Ой намучался   
по теме: я вижу только такое решение
 
var box = {
    method: function() {
      alert( 1 )
    }
};
var arr = [];
arr.method = box.method;
arr.method();
В данном случае просто устанавливаются ссылки на функцию. Т.е. функция не создается заново каждый раз.
 
p.s.: тред особо не читал  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 21:48
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		И добавляя метод в прототип мы автоматом получаем его у уже созданных экземпляров
	 | 
 
	
 
 это зло вообще-то   
могу еще вариант предложить с аппедиксом    
var arr = [];
arr.some = {}; // тут твой мега объект, в нем ссылка на родителя (arr)
но это все через ж*пу и проще сделать нормальный объект  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 22:33
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		nerv_, видимо больше ничего не остается. Тут чел то же самое предлагает:  https://github.com/madrobby/zepto/pu...mment-15571557
	
 
	| 
		
			Сообщение от nerv_
			
		
	 | 
 
	| 
		Ой намучался
	 | 
 
	
 
 Впринципе для плагинов нехватает методов (inner|outerWidth, fade* (но есть модуль), slide*). Еще одна серьезная проблема - расширенные селекторы (хотя ведь можно их избегать). Плюс некоторые различия (тип коллекции zepto - массив, а не объект, коллекция не является инстансом $ и т.д.)  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 22:36
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от nerv_
			
		
	 | 
 
	| 
		это зло вообще-то 
	 | 
 
	
 
 Почему зло? Плагины ведь расширяют прототип. Хотя как правило они подключаются в первую очередь. Но ведь никто не запрещает..
 
<script>
$el = $('.el');
</script>
<script src="plugin.js"></script>
<script>
$el.plugin() // без прототипа  - беда!
</script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 23:05
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		Почему зло?
	 | 
 
	
 
 я имел ввиду злоупотребление: создали объект, работаем с ним, добавили новый метод в прототип, появился в объекте - это не есть гуд на мой взгляд
 
я не понял зачем тебе тема с прототипом, т.к. плагины для зепто пишутся также как и для жуквери:
 
$.fn.some = function() {
почему намучался. зепто не полностью совместим с жуквери. В частности, когда я подключал плагин-шаблонизатор к зепто, мне пришлось лезть в код этого плагина - раз, два - дописывать для зепто и подключать плагин, эмулирующий метод жуквери, кот. нет в зепто  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 23:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.09.2010 
					
					
					
						Сообщений: 8,804
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Нужно пофиксить коллекции zepto и дописать $.prototype = $.fn. Тогда останутся только проблемы отсутствия методов, которые легко решить и проблема расширенных селекторов, от которых народ нужно отучать. 
Хотя есть и другие проблемы.. Тот же data(), который полноценен только через модуль. Есть и другие проблемы.. 
 
Тут циклическая зависимость - зепто не используют в качестве замены jQuery => его особенности не принимают во внимание => зепто не используют... 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.03.2013, 23:50
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		Нужно пофиксить коллекции zepto
	 | 
 
	
 
 не понял, что ты имеешь ввиду
 
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		и дописать $.prototype = $.fn
	 | 
 
	
 
 зачем?
 
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		Тот же data()
	 | 
 
	
 
 его я и писал    если нужно, могу ссылку дать
 
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		его особенности не принимают во внимание
	 | 
 
	
 
 скорее одни особенности (жуквери) накладываются на другие (зепто) при попытке использовать зепто
 
	
 
	| 
		
			Сообщение от danik.js
			
		
	 | 
 
	| 
		в качестве замены jQuery
	 | 
 
	
 
 как результат приходиться лезть в исходники обоих библиотек, чтобы понять, как оно работает и фиксить, фиксить, фиксить    
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |