| 
	| 
	
	| 
		
	| 
			
			 
			
				02.03.2009, 21:32
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| Благополучно забыв, что в вашей статье описывается (т.е. читая вышеприведеный код без знания вашего механизма наследования), я не понимаю, что делают функции $class и самая первая.
 Во-вторых, определение функций в конструкторе а-ля this.someMethod = function() {} создает для каждого объекта свой набор методов, вместо ссылок на прототип.
 |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 21:50
			
			
			
		 |  
	| 
		
			|  | Интересующийся       |  | 
					Регистрация: 02.03.2009 
						Сообщений: 20
					 
		
 |  |  
	| 
	
 
	| Сообщение от Kolyaj   |  
	| Благополучно забыв, что в вашей статье описывается (т.е. читая вышеприведеный код без знания вашего механизма наследования), я не понимаю, что делают функции $class и самая первая. 
 Во-вторых, определение функций в конструкторе а-ля this.someMethod = function() {} создает для каждого объекта свой набор методов, вместо ссылок на прототип.
 |  
	
 Ага!    Значит, что делает функция $extends() понятно. Соответственно, не всё так плохо (имеется ввиду в моей "обёртке"). 
 
Первая функция - конструктор класса DerivedClass (исправил название класса в предыдущем посте). 
Функция $class() - нужна для "финальной сборки" класса.
 
Об этом, правда, подробнее можно узнать из статьи. Нет смысла здесь дублировать.
 
Что касается "определение функций в конструкторе а-ля this.someMethod" - эту проблему тоже решает функция $class(). 
Функция someMethod создается только один раз для всего класса.
 
P.S. Спасибо за отзыв   |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 21:59
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| Вы не поняли, я не прошу объяснять код, а говорю, что если мне придется читать подобный код, уйдет слишком много времени на осмысливание обертки. 
Лично у меня сейчас модифицированный способ из Prototype, в Ext'е похожий по использованию.
 
var A = Class.create({
    init: function() {
    },
    method1: function() {
    },
    method2: function() {
    }
});
var B = Class.extend(A, {
    init: function() {
    },
    method3: function() {
    },
    method4: function() {
    }
})
 |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 22:08
			
			
			
		 |  
	| 
		
			|  | Интересующийся       |  | 
					Регистрация: 02.03.2009 
						Сообщений: 20
					 
		
 |  |  
	| Первое, что мне лично не нравится - Prototype (как и многие другие фрэймворки) создаёт "наследование" путём копирования свойств и методов из одного класса в другой. Полагаю instanceOf тут не работает?
 Второе - а как насчет вызова конструктора и методов базового класса? Вот это на самом деле и есть главная задача. По крайней мере, моя.
 |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 22:13
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| 
	
 
	| Сообщение от Pavel_Volodko |  
	| создаёт "наследование" путём копирования свойств и методов из одного класса в другой |  
	
 Неверное предположение.
 
	
 
	| Сообщение от Pavel_Volodko |  
	| а как насчет вызова конструктора и методов базового класса? |  
	
 
var B = Class.extend(A, {
    init: function() {
        B.superclass.init.apply(this, arguments);
    }
});
 |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 22:49
			
			
			
		 |  
	| 
		
			|  | Интересующийся       |  | 
					Регистрация: 02.03.2009 
						Сообщений: 20
					 
		
 |  |  
	| 
	
 
	| Сообщение от Kolyaj   |  
	| Неверное предположение. |  
	
 Разве?
 
Ну, посмотрим в Prototype (version 1.6.0.3, метод Class.create()):
 
...
for (var i = 0; i < properties.length; i++)
      klass.addMethods(properties[i]);
...
Хотя instanceof, надо признать, всё же работает (для вашего примера).			 Последний раз редактировалось Pavel_Volodko, 02.03.2009 в 22:51.
 |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 22:55
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| Это не наследование реализуется, а новые методы навешиваются. Наследование там стандартное 
klass.prototype = new subclass;
 
Впрочем сейчас в Prototype слишком много всего непонятно для чего. |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 22:59
			
			
			
		 |  
	| 
		
			|  | Интересующийся       |  | 
					Регистрация: 02.03.2009 
						Сообщений: 20
					 
		
 |  |  
	| 
	
 
	| Сообщение от Kolyaj   |  
	| Это не наследование реализуется, а новые методы навешиваются. Наследование там стандартное 
 
klass.prototype = new subclass;
 
 Впрочем сейчас в Prototype слишком много всего непонятно для чего.
 |  
	
 Вот и я о том же. "Навешивание методов" из той же оперы. |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 23:18
			
			
			
		 |  
	| 
		
			
			| ...       |  | 
					Регистрация: 09.03.2008 
						Сообщений: 216
					 
		
 |  |  
	| Pavel_Volodko,
 
Сходу скачал только финальный вариант, сразу возник вопрос - почему передаются функции, а не заранее созданный объект-прототип? В смысле, в чём фишка?   upd  а, идею функций понял, нужен верный $className...
upd2  и не хочется копировать... 			 Последний раз редактировалось Zeroglif, 03.03.2009 в 13:08.
 |  |  
	| 
		
	| 
			
			 
			
				02.03.2009, 23:19
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 19.02.2008 
						Сообщений: 9,177
					 
		
 |  |  
	| А чем ваш способ this.method = function() {} отличается от приведенного прототайповского? (ну кроме того, что в прототайпе лучше тем, что вешается все на prototype) |  |  
 
 
 
 |  |