Уже довольно давно сижу на сайте, читаю форум. А сейчас я изучаю книгу Колина Мука по языку actionscript 3.0. И вот у меня впервые возник вопрос к более опытным товарищам.
В книге на странице 915 приведён следующий код (перепечатываю без комментариев от автора):
Код: Выделить всё
package { import flash.display.MovieClip; import flash.utils.Timer; import flash.events.TimerEvent; public class Star extends MovieClip { private var timer:Timer; public function Star() { timer = new Timer(100, 0); timer.addEventListener(TimerEvent.TIMER, timerListener); timer.start(); } private function timerListener(e:TimerEvent) { randomFade(); } private function randomFade():void { alpha = Math.random(); } public function dospose():void { timer.stop(); } }}
Программа каждые 50 миллисекунд меняет значения прозрачности для каждой конкретной звезды отдельно. =>
Функция-приёмник "timerListener()" зарегистрирована в объекте Timer данного экземпляра класса Star. =>
У объекта события, передаваемого в функцию, есть переменная экземпляра "target", которая указывает на объект Timer. =>
Функция-приёмник не знает, таймер какого именно экземпляра класса Star вызвал эту функцию. =>
Почему тогда переменная alpha из функции randomFade() знает, для какой именно звезды (экземпляра класса Star) менять степень прозрачности?
Сейчас, во время написания текста, у меня появилась догадка, что функция randomFade, это метод экземпляра, а значит она как-то должна знать, таймер какого именно экземпляра привёл к её вызову. Но это только догадка.
Чтобы у меня в голове не возникло непоправимых пробелов в знаниях, разъясните мне пожалуйста поподробнее, что здесь да как. В чём фишка? Почему переменная alpha меняется именно для того экземпляра, таймер которого привел к вызову функции, меняющей эту переменную?