Опубликован: 07.11.2006 | Уровень: специалист | Доступ: свободно
Лекция 7:

Интерфейсы AсtionScript

Мы создали функцию в памяти. Переменная hello содержит ссылку на эту функцию. Любая переменная, содержащая ссылку на функцию, может использоваться для выполнения этой функции посредством добавления пары скобок.

hello ();

Теперь мы можем передать эту ссылку другой переменной.

greeting = hello;

Здесь приветствие в переменной дает ссылку на функцию. Обе переменные теперь содержат ссылку на одну и ту же функцию. Теперь вы можете выполнить функцию следующим образом.

greeting();

Это действует даже для встроенных функций и специальных объектов во Flash. Например, у нас есть объект Math, содержащий метод random(). Это просто функция в памяти. Переменная random в объекте Math содержит ссылку на эту функцию. Мы можем взять эту ссылку и сохранить ее в любом нужном месте.

myRand = Math.random;

Теперь myRand содержит ссылку на функцию, которая будет возвращать случайное число. Вы можете вызвать ее так.

myRand();

Заметьте, что это выражение отличается от следующего.

myRand = Math.random();

В данном случае после имени функции поставлены скобки, поэтому функция и выполняется. Затем она будет возвращать случайное число и передавать его myRand. Это не совсем то, что нужно, но вы будете часто допускать эту ошибку. Даже я до сих пор это делаю!

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

function move() {
    this._x++;
}
mc1_mc.onEnterFrame = move;

Мы создаем функцию в памяти, move представляет ссылку на данную функцию и передает эту ссылку в mc1_mc.onEnterFrame. Внимание! Многие допускают ошибку, набирая следующий код.

mc1_mc.onEnterFrame = move();

Теперь вы должны понимать, почему эта структура не будет работать, и что на самом деле происходит.

Вы также можете прибегнуть к сокращенному методу определения управляющих элементов событий.

mc1_mc.onEnterFrame = function() {
    this._x++;
};

Это можно интерпретировать как создание функции без имени.

function______________ () {
    this._x++;
}

Ссылка на функцию не передается переменной, а выражение выше само по себе при запуске дает в результате ссылку на функцию. Поэтому мы можем взять результат определения функции и присвоить его прямо управляющему элементу события.

mc1_mc.onEnterFrame=function______________________ () {
    this._x++;
};

Безусловно, мы привели длинный пробел в строке для полноты представления. На самом деле нужно писать так, как показано в первом примере выше. Этот метод полезен, когда вы знаете, что вы будете присваивать функцию только один раз и только одному управляющему элементу.

Также обратите внимание на точку с запятой в конце строки. Весь этот блок кода является одним выражением присвоения, и, следовательно, должен заканчиваться точкой с запятой, хотя правилами синтаксиса она не требуется. После определения функций самих по себе точку с запятой можно не ставить.

Игорь Хан
Игорь Хан
След не остается
Александр Коргапольцев
Александр Коргапольцев
Вопрос по содержанию лекции №2, курс Flash MX Studio
Анатолий Федоров
Анатолий Федоров
Россия, Москва