Благополучно забыв, что в вашей статье описывается (т.е. читая вышеприведеный код без знания вашего механизма наследования), я не понимаю, что делают функции $class и самая первая.
Во-вторых, определение функций в конструкторе а-ля this.someMethod = function() {} создает для каждого объекта свой набор методов, вместо ссылок на прототип. |
Цитата:
Первая функция - конструктор класса DerivedClass (исправил название класса в предыдущем посте). Функция $class() - нужна для "финальной сборки" класса. Об этом, правда, подробнее можно узнать из статьи. Нет смысла здесь дублировать. Что касается "определение функций в конструкторе а-ля this.someMethod" - эту проблему тоже решает функция $class(). Функция someMethod создается только один раз для всего класса. P.S. Спасибо за отзыв :yes: |
Вы не поняли, я не прошу объяснять код, а говорю, что если мне придется читать подобный код, уйдет слишком много времени на осмысливание обертки.
Лично у меня сейчас модифицированный способ из Prototype, в Ext'е похожий по использованию.
var A = Class.create({
init: function() {
},
method1: function() {
},
method2: function() {
}
});
var B = Class.extend(A, {
init: function() {
},
method3: function() {
},
method4: function() {
}
})
|
Первое, что мне лично не нравится - Prototype (как и многие другие фрэймворки) создаёт "наследование" путём копирования свойств и методов из одного класса в другой. Полагаю instanceOf тут не работает?
Второе - а как насчет вызова конструктора и методов базового класса? Вот это на самом деле и есть главная задача. По крайней мере, моя. |
Цитата:
Цитата:
var B = Class.extend(A, {
init: function() {
B.superclass.init.apply(this, arguments);
}
});
|
Цитата:
Ну, посмотрим в Prototype (version 1.6.0.3, метод Class.create()):
...
for (var i = 0; i < properties.length; i++)
klass.addMethods(properties[i]);
...
Хотя instanceof, надо признать, всё же работает (для вашего примера). |
Это не наследование реализуется, а новые методы навешиваются. Наследование там стандартное
klass.prototype = new subclass; Впрочем сейчас в Prototype слишком много всего непонятно для чего. |
Цитата:
|
Pavel_Volodko,
Сходу скачал только финальный вариант, сразу возник вопрос - почему передаются функции, а не заранее созданный объект-прототип? В смысле, в чём фишка? ;) upd а, идею функций понял, нужен верный $className... upd2 и не хочется копировать... |
А чем ваш способ this.method = function() {} отличается от приведенного прототайповского? (ну кроме того, что в прототайпе лучше тем, что вешается все на prototype)
|
| Часовой пояс GMT +3, время: 05:34. |