Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.10.2008, 12:51
voloshin_d вне форума Посмотреть профиль Отправить личное сообщение для voloshin_d Найти все сообщения от voloshin_d
  № 1  
Ответить с цитированием
voloshin_d

Регистрация: Jul 2008
Адрес: Киев, Украина
Сообщений: 9
По умолчанию Разница при компиляции AS2 под FP6 и FP7

Привет всем. Помогите разобраться в следующей ситуации:
Я создаю 2 класса в стиле AS2 - класс A:
Код:
class A
{
	public function A()
	{
		trace("class A");
	}
}
и класс B, который наследуется от первого класса:
Код:
class B extends A
{
	public function B()
	{
		super();
		trace("class B")
	}
}
В первом кадне временной шкалы объявляю экземпляр класса B:
Код:
trace("------ Frame 1");
var instanceB:B = new B();
При компиляции под Flash Player 6 в аутпуте я получаю следующее:
Код:
class A
------ Frame 1
class A
class B
т.е. я так понимаю, до выполнения кода в первом кадре создается еще один экземпляр класса A. Если скомпилировать под Flash Player 7 такого не происходит. Подскажите плыз с чем это связано и где можно почитать про эту особенность. Очень нужно.

Старый 24.10.2008, 16:04
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 2  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
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")
//*/
Если поменять закомментированность в выделенных цветом строчках кода, то и возникнет описанный выше эффект.

Старый 24.10.2008, 16:59
voloshin_d вне форума Посмотреть профиль Отправить личное сообщение для voloshin_d Найти все сообщения от voloshin_d
  № 3  
Ответить с цитированием
voloshin_d

Регистрация: Jul 2008
Адрес: Киев, Украина
Сообщений: 9
Цитата:
Сообщение от chingachgoog Посмотреть сообщение
super() в конструкторе класса B можно и не писать - если он опущен, то компилятор автоматом вставит его в первую строчку конструктора.
У меня в оригинале класс А принимает параметры, необходимые для его инициализации, по этому я в ручную вызываю его и при написании примера на автомате прописал его. Но спасибо за замисание, буду учитывать. ))

А собственно по вопросу: получается это особеннось компилятора, которую нельзя обойти?

Старый 24.10.2008, 17:40
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 4  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от voloshin_d Посмотреть сообщение
А собственно по вопросу: получается это особеннось компилятора, которую нельзя обойти?
Почему нельзя? Можно, например в конструкторе класса А проверять переданные аргументы, и если ничего не передано, то выходить через return.

Или собрать классы на AS1.

Или докопаться до причины - я не уверен, что дело обстоит именно так, как я в предыдущем посте написал. Может еще где особенность 6-й версии: как-нибудь по-другому работает new, super, _global или #initclip?

Старый 11.02.2009, 20:10
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 5  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Кажется разобрался.

Это механизм публикации класса в swf так различается.
Дело в том, что компилятор под версией ФП6 добавляет в #initclip мувика-класса (с id в библиотеке вида __Packages.имя_Класса) вызов super(), а последующие версии компиляции вызов super не делают.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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