Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Web-дизайн 1 часть / Литература / ActionScript 2.0. Программирование во Flash MX 2004.pdf
Скачиваний:
354
Добавлен:
26.03.2015
Размер:
8.81 Mб
Скачать

callee. Свойство, указывающее на определение функции, к которому относится текущая активация. Проще говоря, свойство callee позволяет обратиться к выполняемой функции, не зная ее имени. Это имеет значение для задания рекурсии в случае анонимных функций. В качестве примера, следуя установленной традиции, приведем функцию, вычисляющую факториал числа:

var factor_5:Number = function (par:Number):Number { if (par = 0) {

return 1; } else {

return par*arguments.callee(par-1);

}

}.apply(null, [5]); // Метод apply позволяет активизировать напрямую

// литерал функции (этого нельзя сделать при помощи оператора

"()")

// Выводит: 120

trace(factor_5);

caller. Данное свойство указывает на функцию, из которой была вызвана функция, код которой содержит выражение с ним. Если функция была активирована не из другой функции, то свойство caller возвращает null. Пример:

function fund () :Void {

func2(); // Функция fund() вызывает func2()

}

func1.property = "Привет!!!"; // Добавляем func1 свойство

//(в одной из своих ипостасей функции являются обычными объектами,

//поэтому им можно присваивать свойства)

function func2():Void {

trace(arguments.caller.property); // Читаем свойство property // вызвавшей func2 () функции

}

funcl(); // Выводит: Привет

Важная особенность свойства caller: оно указывает на объект функции, а не на объект активации (различия см. в разделе 4.8). Это означает, что, например, невозможно получить список параметров вызвавшей функцию функции, набрав:

arguments.caller.arguments

В ЕСМА-262 третьего издания нет описания свойства caller. Это означает, что в следующем издании программы оно вполне может быть исключено из ActionScript. Тем более, так уже поступили разработчики JavaScript.

4.7.Особенности передачи в функции составных объектов данных

В предыдущей главе мы установили, что существует принципиальное различие между тем, присваивается ли переменной переменная с элементарным или же составным значением. Разница заключается в том, что при присваивании переменной с элементарным значением происходит копирование объекта данных — и в результате каждая переменная ссылается на отдельный элемент. Если же присваиваемая переменная хранит объект или клип, то передается только ссылка на объект данных — в итоге обе переменные указывают на один и тот же объект. Было бы логичным предположить, что похожая ситуация должна наблюдаться при передаче функции переменных в качестве параметров.

Действительно, полностью аналогично случаю присваивания переменной другой переменной, если вы используете в качестве аргументов переменные с элементарными значениями, при формировании массива arguments и инициализации формальных параметров происходит копирование объектов данных, хранимых переменными. Если же переменная указывает на объект или клип, то параметру передается лишь ссылка на него. Отсутствие дублирования объекта данных при этом означает, что любые модификации, которые происходят с ним во время выполнения кода функции

Соседние файлы в папке Литература