Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Порядок выполнения кода. (http://www.flasher.ru/forum/showthread.php?t=117235)

chingachgoog 22.10.2008 15:15

Порядок выполнения кода.
 
Например есть Document class и класс мувика изначально расположенного на таймлайне. Почему сначала выполняется конструктор класса мувика, а не конструктор Document class? Что вообще выполняется самым первым и какова иерархия дальше?

wvxvw 22.10.2008 15:39

Потому что его уже готовым нужно приаттачить к документ-классу. Если речь идет о Флеше, то первыми выполняются все статики классов включеных в первый кадр. Потом по цепочке от последних потомков документ класса к документ классу (если потомки не создаются програмно), потом документ класс.

chingachgoog 22.10.2008 16:02

Хм. Как-то не задумывался раньше, но в чем логика, что Document class выполняется последним? Он же по идее класс главного таймлайна?
И можно ли назначить порядок выполнения классов изначальных мувиков (если их несколько)?

Gaen 22.10.2008 16:23

Всё логично. Если в первом кадре лежат какие-то мувиклипы, то сначала отрабатывают их конструкторы, а потом запускается конструктор document class'а, внутри которого уже доступны готовые сконструированные мувики.

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

BlooDHounD 22.10.2008 18:25

а как вы узнали, что сперва выполняется? по трэйсу? не задумывались возможно инициализация всех детей происходит, первой строчкой в конструкторе?

wvxvw 22.10.2008 20:31

так а разница? =)
кто из этих двух функций выполнится раньше?
Код:

function a():void { b(); }
function b():void { trace("foo"); }
a();

Я бы сказал, что b выполниться раньше т.как когда b уже закончит выполняться, а еще не будет выполнена. Но это вопрос точки зрения =)

chingachgoog 22.10.2008 21:40

Цитата:

Сообщение от BlooDHounD (Сообщение 772114)
а как вы узнали, что сперва выполняется? по трэйсу?

А как иначе? Есть способ посмотреть историю стека AVM?

Цитата:

Сообщение от BlooDHounD (Сообщение 772114)
не задумывались возможно инициализация всех детей происходит, первой строчкой в конструкторе?

Это будет иметь практическое значение?

Gaen 22.10.2008 23:26

Цитата:

Сообщение от BlooDHounD (Сообщение 772114)
не задумывались возможно инициализация всех детей происходит, первой строчкой в конструкторе?

Здесь имеется в виду что дети изначально лежат на сцене, а не создаются программно. Хотя скорее всего в итоге всё действительно сводится к тому что их конструкторы отрабатывают внутри super() документ-класса, а потом уже начинает исполняться остальной его код.

BlooDHounD 23.10.2008 11:34

GAIKER, ага. так и есть.
chingachgoog:
1. есть.
2. будет? может и будет. у всех свои "практические" цели.

darksranger 23.10.2008 13:41

/off
чесно гуглил
чесно сматрел в хелп ( который мне вобще не чего, кроме как ссылки на object, не дал )

yandex вобще сума сошел, от этой строчке

кто ни будь мне раскажет, про таинсвенный класс !? super () ? или может есть где рядом справка по нему
/end off

mre 23.10.2008 13:55

super - ссылка на родителя.

chingachgoog 23.10.2008 14:32

Цитата:

Сообщение от BlooDHounD (Сообщение 772306)
GAIKER, ага. так и есть.

И как это можно посмотреть?

Цитата:

Сообщение от BlooDHounD (Сообщение 772306)
chingachgoog:
1. есть.

Адреса, пароли, явки? :)

wvxvw 23.10.2008 19:19

parent - ссылка на родителя в случае если это DisplayObject и parent() если это XML. super() - это инстрикция выполнить конструктор + инициализировать классовые переменные суперкласса.
super - это ссылка на суперкласс для случаев, когда нужно получить метод именно супекласса а не метод неследника.

AL.exe 23.10.2008 21:50

Цитата:

Здесь имеется в виду что дети изначально лежат на сцене, а не создаются программно. Хотя скорее всего в итоге всё действительно сводится к тому что их конструкторы отрабатывают внутри super() документ-класса, а потом уже начинает исполняться остальной его код.
Цитата:

И как это можно посмотреть?
Ну, если это верно, то можно прописать в конструкторе DocumentClass свои выражения, а после них вызвать super() - конструкторы объектов, размещенных на сцене в IDE должны будут вызваться в конце выполнения конструктора DocumentClass.

chingachgoog 23.10.2008 22:34

Цитата:

Сообщение от AL.exe (Сообщение 772506)
Ну, если это верно, то можно прописать в конструкторе DocumentClass свои выражения, а после них вызвать super() - конструкторы объектов, размещенных на сцене в IDE должны будут вызваться в конце выполнения конструктора DocumentClass.

Да, действительно...

BlooDHounD 23.10.2008 22:36

chingachgoog, ну например поставить дебаг плэйер :) ну и немножко знайний АС3 и смекалки.

etc 23.10.2008 23:01

Цитата:

Сообщение от chingachgoog (Сообщение 772352)
Адреса, пароли, явки? :)

getStackTrace


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

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