Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   вызов/передача произвольной функции из класса (http://www.flasher.ru/forum/showthread.php?t=112079)

Denis Davidov 17.05.2008 16:44

вызов/передача произвольной функции из класса
 
Всем доброго дня!

Ни как не могу найти как вызвать произвольную функцию, передаваемую параметром из класса?

Для иллюстрации проблеммы написал:
Код:

Class MyClass extends MovieClip {
        private var function,whoCalls,params;
        funcion MyClass(function,whoCalls,params) {
                this.function=function;
                this.whoCalls=whoCalls;
                this.params=params;
        }
        function Call() {
              this.whoCalls.this.function(this.params);
        }
}

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

Чем это вызвать и какие параметры/как нужно передавать классу?

Видел это но ни понял до конца как это работает:
Код:

function.call(scope,params);
Робовал передавать объект и имя функции - даже не могу передать :(
Спасибо за помощь.

з.ы. что-то я начал много спрашивать, но всегда стараюсь найти ответ в форуме/хелпе сначала. не всегда получается :)

iNils 17.05.2008 17:11

Также как и всегда вызывается функция, с помощью скобок ().

А как вы собираетесь передавать параметры в класс, когда этот класс наследник MovieClip, то есть через new он не создается?

Denis Davidov 17.05.2008 17:30

Разобрался, оказывается была опечатка в коде - поэтмоу не работало :)
Сделал так (если у кого-то возникнут подобные вопросы):
В классе метод:
Код:

function setCallback(Func,scope,parameters)
{
                this._Func=Func;
                this._scope=scope;
                this._parameters=parameters;
}

Потом внутри класса эта функция вызывается как:
Код:

this._Func.call(this._scope,this._parameters)
При этом Func - полный путь к функции, e.g. this.myObj.function
scope - путь к объекту, кот. ее вызывает e.g. this.myObj
params - параметры.

2iNils:
насчет параметров не совсем понял, елси сделать new MovieClip(), разве
нельзя указать в скобках параметры для конструктора?
Теперь уже не важно ибо сделал отдельный метод, а конструктор оставил пустым.

iNils 17.05.2008 18:16

Цитата:

Сообщение от Denis Davidov (Сообщение 739743)
насчет параметров не совсем понял, елси сделать new MovieClip(), разве
нельзя указать в скобках параметры для конструктора?

new MovieClip(), а также new TextField () не создают мувиклипы и текстовые поля.
Их можно создать только с помощью методов: createEmptyMovieClip, attachMovie и createTextField

Denis Davidov 17.05.2008 18:27

я забыл, а что они (операторы new) делают? просто "фиксируют" класс переменной, что-бы потом не записать туда что-попало?

з.ы. пардон если офф-топ, но просто что-бы уж разобраться...

p/s/ они - new (e.g. new MovieClip(), new TextField(), etc)

iNils 17.05.2008 21:33

Ничего не делают. Просто у класса должен быть конструктор.

Denis Davidov 19.05.2008 15:19

Кстати, я так понял удобнее использовать apply чем call,
Код:

this._Func.apply(this._scope,this._parameters)
ибо call принемает параметры по одному: (...,param1, param2,....), т.е. вышеуказанный код работает только на один параметр, или параметр массив, тогда как
apply в массиве: (...,[param1,param2,...])
отличий вродебы нет...

iNils 19.05.2008 16:12

Я собственно только apply и использую, скобки добавить не сложно, а вот сменить call на apply, если вдруг понадобится, может отнять много времени.


Часовой пояс GMT +4, время: 11:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.