Диагностика, ремонт и защита

Сайт досуга perm-hot.com | Сайт досуга в Рязани http://ryazan-dosug.mobi//

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


Что происходит, когда мы определяем свойство, используя ключевое слово 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 присваивается контейнеру, в котором он может создавать или изменять свойства. И это только часть его возможностей в создании экземпляра, самый распространённый, но вовсе не самый значимый случай его использования. У нас будет возможность убедиться в этом, когда мы начнём разбираться с прототипами.

  









Начало  Назад  Вперед


Книжный магазин