![]() |
(сложный) Потеря наследования - моя вина или компилятора?
проект большой и классов много. но случилась непонятная проблема.
допустим класс Код AS1/AS2:
я уже всё перебробовал: - менял очередности импортов. - называл классы так что бы имя отцовского класса было первым по алфавиту например: "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% что дело в чем-то другом и лучше решить проблему чем затыкать дыры. |
А почему экземпляр класса SimpleClass должен показывать, что он экземпляр своего предка (ClassAsParent)? Он и не будет это показывать, пока вы ему насильно не пропишите prototype.__proto__ = ...
А так правильно: Код:
trace(this instanceof SimpleClass); |
Это недостаток instanceof, в силу кривой реализации классов в AS1/AS2.
|
А на каком этапе наследования инстансоф становится якобы не ребенком суперкласса?
|
Цитата:
Код AS1/AS2:
Цитата:
дело в том что раньше SimpleClass работал и наследовался от ClassAsParent нормально. Тоесть методы ClassAsParent работали в SimpleClass, но в какой-то момент SimpleClass перестал наследоваться. Если вы грешите на instanceof. то такой код Код AS1/AS2:
я уже вторые сутки пытаюсь понять что именно привело к такому результату и как это исправить. неужели никто не сталкивался с такой проблемой? з.ы. компилирую в flash cs4. попробовал mtasc (версии 1.14) - результат такой же. Добавлено через 6 минут Цитата:
|
Возможно дело в этом:
Цитата:
add: А вообще попробуйте вместо Код:
trace(this instanceof ClassAsParent);Код:
trace(this.prototype.__proto__ == ClassAsParent.prototype) |
не удалось воспроизвести: упорно пишет что (this instanceof ClassAsParent) - true и методы родителя вызывает..
нужен живой пример трабла |
после запарок с классом 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 минуты нашёл строчку которая нарушает наследование: Код AS1/AS2:
Код AS1/AS2:
Код AS1/AS2:
есть у кого-нибудь почему так происходит? |
дал бы минимальный пример, который косит
каким боком здесь ActionBasic ? а если инициализацию _distMax перенести в конструктор тоже косит? |
Действительно, без минимального примера, который косит, врятли тут кто-то чем-то поможет.
|
| Часовой пояс GMT +4, время: 14:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.