Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание объекта без ключевого слова var (http://www.flasher.ru/forum/showthread.php?t=158406)

Zolza 19.06.2011 15:31

Создание объекта без ключевого слова var
 
Увидел такой код в статье про MVC:
Код AS3:

new BaseController(this);

Затем, где-то рядом было так:
Код AS3:

var controller:BaseController = new BaseController(this);

Вопрос не про MVC, нет.

Получается, можно создавать экземпляры объектов напрямую через new без ключевого слова var ? Какие подводные камни при этом существуют, и каким из двух способов и когда стоит пользоваться?

alatar 19.06.2011 16:23

В первом случае у вас не будет ссылки на объект. Соответственно вы ничего не сможете с ним сделать (если он сам себя не добавить куда-нибудь), и при первой возможности GC его удалит.

S-ed 19.06.2011 16:26

Но хуже то, что первый будет доступен для сборщика с момента создания.

Crazy 19.06.2011 16:29

Про GC: очень типичная ошибка.

Hint: что будет, если объект в конструкторе подпишется на события? Или просто использует переданный ему в конструкторе параметр и заассайнит этому объекту ссылку на себя?

alatar 19.06.2011 16:31

Будет то, что написано в скобках. Появится ссылка на объект, со всеми вытекающими.

КорДум 19.06.2011 16:31

Не забывайте про
Код AS3:

addChild(new MyMovieClip());

Вот так GC ничего не заберет, но ссылку на экземпляр класса MyMovieClip можно получить только через перебор в дисплей листе по индексам.
Конструктор - это, если грубо говоря, функция, которая возвращает экземпляр класса. Хотя конструктор - это не функция и не метод, это конструктор, если занудничать.

Crazy 19.06.2011 16:32

Цитата:

Сообщение от Zolza (Сообщение 1004776)
Получается, можно создавать экземпляры объектов напрямую через new без ключевого слова var ? Какие подводные камни при этом существуют, и каким из двух способов и когда стоит пользоваться?

Ключевое слово "var" вообще не имеет никакого отношения к созданию объектов.

Когда стоит пользоваться? Когда результат new передается параметром в другой метод.

Код AS3:

foo.setBar(new Bar());

Делать как в приведенном Вами примере -- не стоит.

Zolza 19.06.2011 16:47

Всем спасибо

S-ed 19.06.2011 17:15

Crazy
Наличие подписки на событие не является критерием для исключения из списка сборщика (для этого пишут деструкторы, хотя в AS3 их нет в явном виде). Я думаю, что это также распространенная ошибка, не отписывать удаляемый объект и забывать отключать в нем таймеры и останавливать каретку (и тоже для детей).
(тоесть, даже после присвоения null все процессы в экземпляре буду протекать как и раньше)

etc 19.06.2011 18:16

Цитата:

Сообщение от S-ed (Сообщение 1004813)
Crazy
Наличие подписки на событие не является критерием для исключения из списка сборщика

Является, если на источник события есть внешние ссылки.


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

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