Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   TypeError: Error #1007: Instantiation attempted on a non-constructor. (http://www.flasher.ru/forum/showthread.php?t=117934)

Gaen 11.11.2008 00:07

TypeError: Error #1007: Instantiation attempted on a non-constructor.
 
Идея такая: делаем хеш из классов, и в зависимости от параметра создаём и возвращаем объект нужного класса.

Код AS3:

private function createModuleView(moduleType:String, moduleModel:Model):View{
 
        var classes:Object        =        {};
 
        classes[SiteModuleType.TEXT        ]        =        site.modules.text.ModuleView;
        classes[SiteModuleType.PHOTO        ]        =        site.modules.photo.ModuleView;
        classes[SiteModuleType.PHOTOSET        ]        =        site.modules.photoset.ModuleView;
        classes[SiteModuleType.SETGROUP        ]        =        site.modules.setgroup.ModuleView;
 
        return new classes[moduleType](moduleModel);
 
}//createModuleView

Но на выходе получаю эту ошибку.

Что я делаю не так?

etc 11.11.2008 00:24

Вопрос первый: зачем хеш пересоздавать каждый раз при вызове метода?
Вопрос второй: чем не угодил switch?
Вопрос третий: какое значение moduleType передается?

Gaen 11.11.2008 00:34

1. Переписал этот кусок цепочкой if - return'ов, уже неактуально
2. Не люблю свитч, громоздкий он и выглядит некрасиво :)
3. Одно из перечисленных в хэше. Все проверки уже выполнены.

Вопрос снят. Был косяк в проверках moduleType.

etc 11.11.2008 00:47

2. Выглядит он вполне красиво, если оформить нормально;

Тем не менее, метод по сути натуральная фабрика, но опирается она на какие-то строковые параметры, объясняющие, какого типа является передаваемая модель, хотя мог бы опираться на класс передаваемой модели без строкового костыля, но в данном случае это невозможно, в силу того, что все модели имеют одинаковое имя класса при разных пакетах, что мало того, что странно само по себе, так ещё и создаст проблемы в будущем.

Куда потерялась логика — неизвестно.

Gaen 11.11.2008 01:10

Структура изначально кривовата, времени переделывать уже нет. В конце концов это первый блин в mvc :)

moduleType - не совсем костыль. Этот параметр берёт своё начало ещё из события, которое посылает меню и в котором указывается что за модуль показывать и с какими параметрами.

Модели все одинаковые, код в соседнем треде про mvc. Ссылки на модели модулей явно нигде не хранятся, поэтому они попадают в GC при удалении модуля.

Модули мне почему-то показалось красивым раскидать по разным пакетом и обозвать одинаковыми именами... Наверно не хотелось в одну кучу всё кидать. Ко мне вообще иногда очень забавные мысли приходят. Но пока ещё всё можно исправить.

А вообще вся эта деятельность направлена на переписывание вот этого чуда: http://photoroot.ru/ потому что сейчас что-то туда дописывать равносильно копанию в говне.

etc 11.11.2008 01:12

Тем не менее, уже можно быть морально готовым к тому, что это ещё раз надо будет переписывать.

Gaen 11.11.2008 01:23

Добавления модулей в ближайшие несколько лет не предвидится, поэтому терпит.
Сейчас я нарабатываю опыт на таких вот вещах, учусь на своих ошибках и пытаюсь учиться на чужих. С каждым разом результат получается всё лучше.

BlooDHounD 11.11.2008 10:39

лучше? Вы уверены? кто оценивает Ваше лучше?

Gaen 11.11.2008 11:36

Основной критерий - время и нервы, которые уходят на то чтобы что-то добавить или изменить. С каждым разом это делается легче.

BlooDHounD 11.11.2008 12:06

"легче" - совсем не синоним "лучше".


Часовой пояс GMT +4, время: 06:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.