![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Добрый день,
извините за назойливость, но мне необходимо понять - почему плохо создавать функции внутри функций? И как правильно организовать следующий код? public function loadImg():Void {
var mclLoader:MovieClipLoader = new MovieClipLoader();
var oLoadListener:Object = new Object();
mclLoader.addListener(oLoadListener);
function onLoadError(mcTarget:MovieClip, sErrorCode:String):Void {}
}
![]() |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
dashaaa, ну во-первых, приведенный вами код не будет работать, просто потому что onLoadError не принадлежит объекту oLoadListener. А вложенные функции плохи тем, что во первых, плывет область видимости и начинаются проблемы с обращением к различным свойствам и объектам, во вторых, вместо того, что создать метод один раз в памяти, он постоянно пересоздается новый.
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Дело в том, что функция просто выполняется при вызове, и выполнившись, возвращает результат или меняет чтото вне себя. После того, как она выполнилась, все ее внутренние переменные больше недоступны, точнее их уже нет. Все эти переменные - mclLoader, oLoadListener, и функция onLoadError() существуют лишь до тех пор, пока выполняется loadImg(), потому что это ее внутренние переменные. Они как пассажиры пролетающего вагона - могут разговаривать друг с другом, но Вы, на полустаночке), ни словом с ними не перекинетесь. Пролетая мимо, они Вам могут крикнуть "загрузи картинку и отдай Васе на пятом сиденье", но пока Вы сбегаете за картинкой - ни Васи, ни сиденья.
(из моего поста могло создаться впечатление, что дело во времени, но на самом деле конечно в областях видимости - т.е. нормальная организация подразумевает, что Вася стоит с Вами на полустаночке. Т.е. функция не должна быть внутри другой функции)
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 29.10.2008 в 13:23. |
|
|||||
|
Цитата:
Но вообще-то идея ясна, спасибо. __etc, спасибо, с областью видимости уже столкнулась, и то, что метод пересоздаётся - это аргумент. Wolsh, спасибо, понятно =) |
|
|||||
|
создавайте экземпляр MovieClipLoader в конструкторе класса
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Функция внутри функции - это нормальное явление, просто надо знать для чего это нужно.
То, что "поезд уходит" тоже не совсем верно: А вообще посмотрите тему Битва гигантов..., там как раз ближе к концу объекты активации исследуются. |
|
|||||
|
хы-хы
в делигаторе функция внутри функции, но там правда ссылка на неё живая |
|
|||||
|
Цитата:
__________________
while(1) {} |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|