Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Как вы узнали о нашем сайте?

От друга, знакомого
Из печатных источников
Из поисковой машины
По ссылке с другого сайта
Случайно
Не знаю


Результаты
Другие опросы

Всего голосов: 1031
Комментарии: 4


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Книги-online



ООП во Flash 5: Область видимости

<<    ООП во Flash 5    >>

  Область видимости

Что происходит, когда мы определяем свойство, используя ключевое слово var? Создаётся локальное свойство. "Локальный" - значит "действующий только в пределах границ данного объекта" или, если хотите, "в пределах границ данного контейнера". Что-то типа "первого парня на деревне", которые рождаются и умирают в пределах одной маленькой деревеньки и никогда никуда из нее не выбираются. Вот пример локального свойства, определённого в классе:

A = function()
{
   var temp = 5;
   this.x   = temp; 
}
trace(A.temp); // не здесь

Где именно действует свойство temp в данном примере? Его действие распространяется на часть функции A, являющуюся "объектом активации" (иногда также используется термин "конструктор функции"). Означает ли это, что мы найдём его с помощью выражения A.temp? Нет. Потому что в этом примере мы его только определяем, целиком объект активации остаётся не вызванным пока не вызвано выражение A(). Означает ли это, что он станет доступным после того, как вызвано выражение A? Нет. Потому что, после того, как вызвано A, он не принимается в расчёт. Вообще, каждый раз, когда вызывается функция, создаётся такой вот объект активации, и каждый раз, когда функция заканчивает своё действие, этот объект активации перестаёт приниматься в расчёт (хотя во Flash 5 из памяти он обычно не удаляется и не исчезает. Ай-яй-яй!). Итак, temp действует в пределах границ этого временного объекта. Однако, из-за того, что у этого объекта активации нет имени и он просто "находится неподалёку" во время действия функции, никакая другая часть программы не имеет к нему доступа (если только вы не вызовете функцию из функции и та вторая функция не увидит его с помощью своего свойства this). Когда он заканчивает своё действие, его локальные свойства не сохраняются.

Многие думают, что "в ActionScript всё, что ни есть - всё объект". Это не совсем так. Кое-что может и не быть объектом или, как это ни странно, может быть более, чем одним объектом. Вышеприведённая функция, это два объекта (вообще-то, строго говоря, целых три, но об этом позже). Существуют объекты-ссылки, называемые A, которые ведут себя, как любые другие объекты. Вы можете добавлять к ним свойства, например A.temp и эти свойства будут вставлены в объект A. У вас также есть блок инструкций, которые составляют функцию. Это и будет вторым объектом - объектом активации, который создаётся каждый раз, когда вызывается функция.

При использовании первого объекта A существует ряд ограничений. Главная задача этого объекта - дать имя блоку функций, чтобы его можно было вызвать. После этого можете использовать его именное пространство для хранения информации о самой функции. Такой информацией может быть, например, имя класса объекта (которое может понадобиться для исправления ошибок), или счётчик, который следит за количеством экземпляров, вызванных с помощью объекта. Такие свойства никак не повлияют на работу функции. В последующих экземплярах от них не останется и следа.

Второй объект, объект активации, производит самопостроение в процессе создания экземпляра. Он бывает совершенно необходим. У него свои границы действия, а его собственное ключевое слово this присваивается контейнеру, в котором он может создавать или изменять свойства. И это только часть его возможностей в создании экземпляра, самый распространённый, но вовсе не самый значимый случай его использования. У нас будет возможность убедиться в этом, когда мы начнём разбираться с прототипами.

  Просто как Flash

Идея создания вызываемого блока инструкций, принадлежащего функции, вновь напоминает нам о Flash. Помните? Символ в библиотеке имеет информацию, которая сообщается экземплярам, управляя их поведением и видом. А как насчёт другой части функции, объекта A в предыдущем примере? Эта часть используется для хранения информации об объекте не относящейся к экземплярам. Например, все символы в библиотеке имеют имена, но эти имена не присваиваются (и вообще никак не относятся) к экземплярам. Если включить опцию "Update Use Count" в библиотеке, каждый символ будет показывать, сколько раз он используется в вашем клипе. Вот и получается, что это свойство имеет отношение к классу, но не имеет отношения к экземпляру. Самое логичное было бы помещать такую информацию вместе с объектом класса. В ActionScript предусмотрена возможность доступа к такой информации (используя intance.constructor.temp, - мы к этому ещё вернёмся), тогда как во Flash она недоступна для ваших экземпляров (она доступна только вам, как пользователю). Конечно, у вас не так уж и часто возникает необходимость в использовании именного пространства, но иногда это просто необходимо.

<<    ООП во Flash 5    >>

 



Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.


книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать