| 
	| 
	
	| 
		
	| 
			
			 
			
				02.03.2009, 23:21
			
			
			
		 |  
	| 
		
			
			| ...       |  | 
					Регистрация: 13.10.2008 
						Сообщений: 225
					 
		
 |  |  
	| Pavel_Volodko,И мелкий же шрифт исходников у Вас в блоге, чуть глаза не сломал :/
 |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 03:53
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| Я просто хотел узнать насколько необходимо использование оберток в реализации наследования |  
	
 имхо, наследование на основе прототипов - естественное для javascript. Мне вот интересно, для чего эмулировать классическое наследование? Для людей которые к нему привыкли? Или есть еще причины?
 
p.s. эмулировать классическое наследование не сложнее чем использовать наследование, основанное на прототипах? Т.е. естественный вариант должен быть проще, по идее |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 13:16
			
			
			
		 |  
	| 
		
			
			| ...       |  | 
					Регистрация: 09.03.2008 
						Сообщений: 216
					 
		
 |  |  
	| 
	
 
	| Сообщение от x-yuri |  
	| Или есть еще причины? |  
	
 Реюз со своими тараканами. Например, автор характеризует классовое наследование, как:
 
	
 
	| Цитата: |  
	| 1. Возможность четкого определения принадлежности объекта классу (instanceOf) |  
	
 Чёткость в js почти невозможна    , а instanceоf ни разу не показывает принадлежность к "классу".
 
	
 
	| Цитата: |  
	| 2. Возможность вызова конструктора или любого метода базового класса |  
	
 Так ли важно цепляться за структуру, сохраняя суперы? Не знаю, у каждого свои тараканы. |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 13:45
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 25.02.2008 
						Сообщений: 707
					 
		
 |  |  
	| 
	
 
	| Сообщение от Zeroglif |  
	| Реюз со своими тараканами. |  
	
 Вероятно, это единственная причина подобных (удобных, относительно своих тараканов) обёрток. |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 15:17
			
			
			
		 |  
	| 
		
			|  | Интересующийся       |  | 
					Регистрация: 02.03.2009 
						Сообщений: 20
					 
		
 |  |  
	| 
	
 
	| Сообщение от Zeroglif   |  
	| Pavel_Volodko, 
 Сходу скачал только финальный вариант, сразу возник вопрос - почему передаются функции, а не заранее созданный объект-прототип? В смысле, в чём фишка?
  
 upd а, идею функций понял, нужен верный $className...
 upd2 и не хочется копировать...
 |  
	
 Не совсем понял что значит "нужен верный $className"... 
Фишка действительно в использовании функции вместо объекта-прототипа. Хотя, на самом деле, всё гениальное просто: для создания связной иерархии классов нужно цеплять прототипы к функциям-конструкторам. Имея только объект-прототип, мы такой возможности не имеем. Приходится извращаться со всякими __proto__, копированием методов или созданием фэйковых подклассов. А вот имея функцию-конструктор для создания объекта-прототипа всё делается элементарно.
upd  копировать и не обязательно. Я сам очень настороженно отношусь к решениям, которым мне не до конца понятны. Я просто поделился тем, что сделал под себя. Just FYI, как говорится.
 
	
 
	| Сообщение от Kolyaj   |  
	| А чем ваш способ this.method = function() {} отличается от приведенного прототайповского? (ну кроме того, что в прототайпе лучше тем, что вешается все на prototype) |  
	
 В принципе, описано чуть выше. 
На мой взгляд, достаточно заглянуть в метод Class.create() от Prototype, чтобы задаться кучей вопросов. Кроме того, выражение "вешается все на prototype" мне кажется странным (хотя, думаю, я понимаю что вы имеете ввиду) и уж тем более я не считаю это лучшим решением.			 Последний раз редактировалось Pavel_Volodko, 03.03.2009 в 15:21.
				Причина: добавил кое-что
 |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 15:36
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| 
	
 
	| Сообщение от Pavel_Volodko |  
	| На мой взгляд, достаточно заглянуть в метод Class.create() от Prototype, чтобы задаться кучей вопросов. |  
	
 Когда я привожу в пример Prototype, я имею в виду версию где-то 1.5, где было еще поменьше лишнего. Другими словами принцип, а не реализация.
 
	
 
	| Сообщение от Pavel_Volodko |  
	| Кроме того, выражение "вешается все на prototype" мне кажется странным |  
	
 Свойство -- prototype, фреймворк -- Prototype. |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 15:37
			
			
			
		 |  
	| 
		
			|  | Интересующийся       |  | 
					Регистрация: 02.03.2009 
						Сообщений: 20
					 
		
 |  |  
	| 
	
 
	| Сообщение от Zibba   |  
	| Pavel_Volodko, И мелкий же шрифт исходников у Вас в блоге, чуть глаза не сломал :/
 |  
	
 Звиняйте, уж больно много кода было. В следующий раз будет по-крупнее.
 
	
 
	| Сообщение от x-yuri   |  
	| имхо, наследование на основе прототипов - естественное для javascript. Мне вот интересно, для чего эмулировать классическое наследование? Для людей которые к нему привыкли? Или есть еще причины? 
 p.s. эмулировать классическое наследование не сложнее чем использовать наследование, основанное на прототипах? Т.е. естественный вариант должен быть проще, по идее
 |  
	
 Дело не в эмулировании. Дело в том, что я расширяю стандартные возможности javascript или пытаюсь сделать что-то немного удобнее для использования при разработке. Если решение мне помогает - цель достигнута. 
Насчет "естественный вариант должен быть проще, по идее" - проще не значит лучше. Я и сам за простые решения. 
Кстати, с этой точки зрения, моё решение абсолютно естественное, т.к. построено на элементарных возможностях прототипного наследования.
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 15:46
			
			
			
		 |  
	| 
		
			|  | Интересующийся       |  | 
					Регистрация: 02.03.2009 
						Сообщений: 20
					 
		
 |  |  
	| 
	
 
	| Сообщение от Zeroglif   |  
	| Реюз со своими тараканами. Например, автор характеризует классовое наследование, как: 
 Чёткость в js почти невозможна
  , а instanceоf ни разу не показывает принадлежность к "классу". 
 Так ли важно цепляться за структуру, сохраняя суперы? Не знаю, у каждого свои тараканы.
 |  
	
 Я бы даже сказал: "чёткость в javascript - понятие расплывчатое"    
По поводу instanceоf  - по-подробнее плиз    
Что касается "цепляться за структуру, сохраняя суперы" - только там где это нужно, естественно.
 
	
 
	| Сообщение от Dmitry A. Soshnikov   |  
	| Вероятно, это единственная причина подобных (удобных, относительно своих тараканов) обёрток. |  
	
 Тараканы - двигатель прогресса (c)   |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 16:02
			
			
			
		 |  
	| 
		
			
			| ...       |  | 
					Регистрация: 09.03.2008 
						Сообщений: 216
					 
		
 |  |  
	| 
	
 
	| Сообщение от Pavel_Volodko |  
	| А вот имея функцию-конструктор для создания объекта-прототипа всё делается элементарно. |  
	
 Не намного элементарнее. Вы объединили несколько задач в одну. Цепочка наследования (делегирования) выстраивается с помошью объекта-прототипа, созданного "промежуточным" конструктором в стиле (паттерн by Lasse Reichstein Nielsen):
 
function inheritObject(object) { 
  function Dummy(){}; 
  Dummy.prototype = object; 
  return new Dummy(); 
}
Одновременно вместо Dummy для "подклассов" используется заранее подготовленная и заложенная в функцию структура. То есть, получив правильно прилинкованный объект-прототип, вы вместо:
 
Person.prototype.x =//...
Person.prototype.y =//...
 
используете:
 
this.x = //...
this.y = //...
 
что, в принципе, почти то же самое кроме доступа к локальным переменным функции из методов. Отсюда 2 вывода - то ли вам важны локальные переменные ($className), то ли вам не нравится "обвешивать" объект-прототип руками или через for-in... |  |  
	| 
		
	| 
			
			 
			
				03.03.2009, 16:15
			
			
			
		 |  
	| 
		
			
			| ...       |  | 
					Регистрация: 09.03.2008 
						Сообщений: 216
					 
		
 |  |  
	| 
instanceof
	
 
	| Сообщение от Pavel_Volodko |  
	| По поводу instanceоf - по-подробнее плиз |  
	
  не оправдывает своего названия буквально и является терминологической натяжкой из чужого class-based мира, в js объекты наследуют от объектов, понятия "класс" не просто нет, а если бы оно даже и было, то мы бы столкнулись с задачей определения, что включить в этот термин - прототип или прототипы, конструктор или конструкторы, или всё вместе, что участвовало в создании цепочки или её составляет, при этом, если цепь прототипов после содания хе-хе "instance" можно считать стабильной и связанной с ним, то свойству 'prototype' конструкторов можно присваивать другие значения, что делает алгоритм instanceof  в этом случае бесполезным. |  |  |  |