![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2008
Адрес: Киев, Украина
Сообщений: 9
|
Привет всем. Помогите разобраться в следующей ситуации:
Я создаю 2 класса в стиле AS2 - класс A: и класс B, который наследуется от первого класса: В первом кадне временной шкалы объявляю экземпляр класса B: При компиляции под Flash Player 6 в аутпуте я получаю следующее: т.е. я так понимаю, до выполнения кода в первом кадре создается еще один экземпляр класса A. Если скомпилировать под Flash Player 7 такого не происходит. Подскажите плыз с чем это связано и где можно почитать про эту особенность. Очень нужно. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
super() в конструкторе класса B можно и не писать - если он опущен, то компилятор автоматом вставит его в первую строчку конструктора.
Возможно разница из-за различного механизма организации наследования: //#initclip 1
// - при компиляции из "классов" AS2
// создаются мувики с экспортом скрипта в первый кадр с #initclip
// c записью функций-классов в объект _global
function A(par){
trace("class A "+par);
}
function B(par2){
this.__proto__.__proto__.constructor("fromB") // эмулятор super()
trace("class B "+par2);
}
//B.prototype=new A("init") // наследование через new
B.prototype.__proto__=A.prototype // обычное наследование
//B.prototype.__proto__.constructor=A // задается автоматически
//#endinitclip
Bobj = new B("timeline"); // создание объекта через new
/*
Bobj={} // эмуляция создания объекта через new
Bobj.constructor=B
Bobj.__proto__ = Bobj.constructor.prototype
Bobj.constructor("timeline")
//*/
|
|
|||||
|
Регистрация: Jul 2008
Адрес: Киев, Украина
Сообщений: 9
|
Цитата:
А собственно по вопросу: получается это особеннось компилятора, которую нельзя обойти? |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
Или собрать классы на AS1. ![]() Или докопаться до причины - я не уверен, что дело обстоит именно так, как я в предыдущем посте написал. Может еще где особенность 6-й версии: как-нибудь по-другому работает new, super, _global или #initclip? |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Кажется разобрался.
Это механизм публикации класса в swf так различается. Дело в том, что компилятор под версией ФП6 добавляет в #initclip мувика-класса (с id в библиотеке вида __Packages.имя_Класса) вызов super(), а последующие версии компиляции вызов super не делают. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|