Благополучно забыв, что в вашей статье описывается (т.е. читая вышеприведеный код без знания вашего механизма наследования), я не понимаю, что делают функции $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, время: 23:22. |