PDA

Просмотр полной версии : вызов/передача произвольной функции из класса


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
насчет параметров не совсем понял, елси сделать 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, если вдруг понадобится, может отнять много времени.