Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 02.03.2009, 21:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Благополучно забыв, что в вашей статье описывается (т.е. читая вышеприведеный код без знания вашего механизма наследования), я не понимаю, что делают функции $class и самая первая.

Во-вторых, определение функций в конструкторе а-ля this.someMethod = function() {} создает для каждого объекта свой набор методов, вместо ссылок на прототип.
Ответить с цитированием
  #22 (permalink)  
Старый 02.03.2009, 21:50
Аватар для Pavel_Volodko
Интересующийся
Отправить личное сообщение для Pavel_Volodko Посмотреть профиль Найти все сообщения от Pavel_Volodko
 
Регистрация: 02.03.2009
Сообщений: 20

Сообщение от Kolyaj Посмотреть сообщение
Благополучно забыв, что в вашей статье описывается (т.е. читая вышеприведеный код без знания вашего механизма наследования), я не понимаю, что делают функции $class и самая первая.

Во-вторых, определение функций в конструкторе а-ля this.someMethod = function() {} создает для каждого объекта свой набор методов, вместо ссылок на прототип.
Ага! Значит, что делает функция $extends() понятно. Соответственно, не всё так плохо (имеется ввиду в моей "обёртке").

Первая функция - конструктор класса DerivedClass (исправил название класса в предыдущем посте).
Функция $class() - нужна для "финальной сборки" класса.

Об этом, правда, подробнее можно узнать из статьи. Нет смысла здесь дублировать.

Что касается "определение функций в конструкторе а-ля this.someMethod" - эту проблему тоже решает функция $class().
Функция someMethod создается только один раз для всего класса.

P.S. Спасибо за отзыв
Ответить с цитированием
  #23 (permalink)  
Старый 02.03.2009, 21:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 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() {

    }
})
Ответить с цитированием
  #24 (permalink)  
Старый 02.03.2009, 22:08
Аватар для Pavel_Volodko
Интересующийся
Отправить личное сообщение для Pavel_Volodko Посмотреть профиль Найти все сообщения от Pavel_Volodko
 
Регистрация: 02.03.2009
Сообщений: 20

Первое, что мне лично не нравится - Prototype (как и многие другие фрэймворки) создаёт "наследование" путём копирования свойств и методов из одного класса в другой. Полагаю instanceOf тут не работает?

Второе - а как насчет вызова конструктора и методов базового класса? Вот это на самом деле и есть главная задача. По крайней мере, моя.
Ответить с цитированием
  #25 (permalink)  
Старый 02.03.2009, 22:13
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Pavel_Volodko
создаёт "наследование" путём копирования свойств и методов из одного класса в другой
Неверное предположение.

Сообщение от Pavel_Volodko
а как насчет вызова конструктора и методов базового класса?
var B = Class.extend(A, {
    init: function() {
        B.superclass.init.apply(this, arguments);
    }
});
Ответить с цитированием
  #26 (permalink)  
Старый 02.03.2009, 22:49
Аватар для Pavel_Volodko
Интересующийся
Отправить личное сообщение для Pavel_Volodko Посмотреть профиль Найти все сообщения от Pavel_Volodko
 
Регистрация: 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.
Ответить с цитированием
  #27 (permalink)  
Старый 02.03.2009, 22:55
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Это не наследование реализуется, а новые методы навешиваются. Наследование там стандартное
klass.prototype = new subclass;


Впрочем сейчас в Prototype слишком много всего непонятно для чего.
Ответить с цитированием
  #28 (permalink)  
Старый 02.03.2009, 22:59
Аватар для Pavel_Volodko
Интересующийся
Отправить личное сообщение для Pavel_Volodko Посмотреть профиль Найти все сообщения от Pavel_Volodko
 
Регистрация: 02.03.2009
Сообщений: 20

Сообщение от Kolyaj Посмотреть сообщение
Это не наследование реализуется, а новые методы навешиваются. Наследование там стандартное
klass.prototype = new subclass;


Впрочем сейчас в Prototype слишком много всего непонятно для чего.
Вот и я о том же. "Навешивание методов" из той же оперы.
Ответить с цитированием
  #29 (permalink)  
Старый 02.03.2009, 23:18
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Pavel_Volodko,

Сходу скачал только финальный вариант, сразу возник вопрос - почему передаются функции, а не заранее созданный объект-прототип? В смысле, в чём фишка?

upd а, идею функций понял, нужен верный $className...
upd2 и не хочется копировать...

Последний раз редактировалось Zeroglif, 03.03.2009 в 13:08.
Ответить с цитированием
  #30 (permalink)  
Старый 02.03.2009, 23:19
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А чем ваш способ this.method = function() {} отличается от приведенного прототайповского? (ну кроме того, что в прототайпе лучше тем, что вешается все на prototype)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с javascript andruhin Общие вопросы Javascript 12 04.05.2012 10:05
Программист на JavaScript (удалённо) Vadym Работа 1 28.01.2009 13:57
Компании Яндекс нужен Javascript гуру Yandex Работа 17 16.12.2008 16:46
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43
Требуется программист на JavaScript Vadym Работа 0 17.07.2008 20:40