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)
|
|
|
|