![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2006
Сообщений: 26
|
проект большой и классов много. но случилась непонятная проблема.
допустим класс import core.Library; import some.package.Class; import parent.ClassAsParent; dynamic class other.package.SimpleClass extends ClassAsParent { public function SimpleClass() { trace(this instanceof ClassAsParent); } } я уже всё перебробовал: - менял очередности импортов. - называл классы так что бы имя отцовского класса было первым по алфавиту например: "FIRST_ClassAsParent" и "SECOND_SimpleClass" - называл классы так чтобы имя отцовского классы было последним например: "SECOND_ClassAsParent" и "FIRST_SimpleClass" - писал полный путь до отцовского класса "dynamic class other.package.SimpleClass extends parent.ClassAsParent" единственно что помогает это other.package.SimpleClass.prototype.__proto__ = parent.ClassAsParent.prototype; но это не решение и я уверен на 200% что дело в чем-то другом и лучше решить проблему чем затыкать дыры. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
А почему экземпляр класса SimpleClass должен показывать, что он экземпляр своего предка (ClassAsParent)? Он и не будет это показывать, пока вы ему насильно не пропишите prototype.__proto__ = ...
А так правильно: |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Это недостаток instanceof, в силу кривой реализации классов в AS1/AS2.
|
|
|||||
|
Регистрация: Jul 2006
Сообщений: 26
|
Цитата:
class Bubn { public static function bindClasses() { other.package.SimpleClass.prototype.__proto__ = parent.ClassAsParent.prototype } } дело в том что раньше SimpleClass работал и наследовался от ClassAsParent нормально. Тоесть методы ClassAsParent работали в SimpleClass, но в какой-то момент SimpleClass перестал наследоваться. Если вы грешите на instanceof. то такой код public function SimpleClass() { trace(this instanceof ClassAsParent); trace(this.__proto__ == ClassAsParent); } я уже вторые сутки пытаюсь понять что именно привело к такому результату и как это исправить. неужели никто не сталкивался с такой проблемой? з.ы. компилирую в flash cs4. попробовал mtasc (версии 1.14) - результат такой же. Добавлено через 6 минут компилируется без ошибок. при запуске swf у класса не работают методы парента |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Возможно дело в этом:
Цитата:
add: А вообще попробуйте вместо проверить реального родителя: Если уж это покажет false, значит вы запутались в путях классов и ClassAsParent просто не является родителем класса SimpleClass. Последний раз редактировалось chingachgoog; 11.02.2009 в 14:39. |
|
|||||
|
Регистрация: Jul 2006
Сообщений: 26
|
после запарок с классом SomeClass выяснилось что проблема с классом ClassAsParent так как все потомки потеряли наследование от него.
я кодю на Eclipse 3.4 (Ganymede) + FDT 3.1.0.11 Enterprise. Проект на AS2. Файл класса ClassAsParent был в кодировке винды (то бишь cp1251). Я работал совсем над другой частью проекта когда появились баги после компиляции. Долго искав, нашёл трабл в том что у класса потерялась наследственность. Парился,парился - пытался заставить наследоваться. Начал этот топик. Потом выяснилось что, что-то не то с классом родителя. Он компилируется без ошибок и в присутствует в swf но другие классы не хотят от него наследоваться. за последние несколько часов был непонятный прорыв в плане: 1. взял файл класса ClassAsParent 2. убрал весь функционал и методов. короче выкинул всё что можно. остались только строки вида public function someMethod(){return false;} 3. откомпилил - в CS4 - наследования нет. 4. удалил. 5. создал новый файл в кодировке utf8 (BOM) 6. перенес из файла "обрезанный фукнционал" в этот файл код класса. 7. откомпилировал 8. НАСЛЕДОВАНИЕ ПОЯВИЛОСЬ. 9. нарадостях начав грешить на кодировки и т.д. востанавливаю функционал класса. 10. компилирую - наследования нет.... 11. создаю новый файл в utf8 (BOM) с обрезаным функционалом (тоесть вернутся к пункту 5.) 12. компилирую 13. наследования нет сижу разбираюсь дальше Добавлено через 53 минуты нашёл строчку которая нарушает наследование: dynamic class obj.action.ActionBasic { .... private var _distMax:Number = Lib.grid_radius; .... } делаю наследование востанавливается есть у кого-нибудь почему так происходит? |
|
|||||
|
дал бы минимальный пример, который косит
каким боком здесь ActionBasic ? а если инициализацию _distMax перенести в конструктор тоже косит? Последний раз редактировалось silin; 11.02.2009 в 17:21. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|