Показать сообщение отдельно
Старый 04.03.2010, 22:30
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 6  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
тогда можно попробовать как-то так
делаем интерфейс

Код AS3:
interface IClassWhoCanCallGrandSuper{
 function callGrandSuper(funcName:String, level);
}
//и наследуем его в базовом классе определив функцию
 
function callGrandSuper(funcName:String, level){
 if (level==0) return this[funcName]();
 else return super.callGrandSuper(funcName, level-1);
}
 
вызываем
 
obj.callGrandSuper(myfunc, 3); //myfunc прадедушки
ну, это только идея, я не проверял как оно работать будет. И даже если будет работать - решение не очень. Не факт, что вызов функции в прадедушки сработает в прадедушку - очень может быть, что этого не произойдет, и тогда просто прийдется прицеплять такой кусок к той функции, которую вы хотите вызывать:

Код AS3:
function myfunc(level=0){
 if (level>0) return super.lmyfunc(level-1);  //это цепляем на каждом уровне вложенности
 
 блаблабла ;//это код самой функции на данном уровне вложенности
}
 
//и вызываем:
obj.myfunc(1);//родитель
obj.myfunc(2);//дед
obj.myfunc(3);//прадед и тд
//этот вариант будет работать точно.
//может так даже удобней - не надо писать конструкции типа
//obj.super.super.super.super.myfunc()
и можно еще попытаться (UPD: попытался - не работает, может кто скажет почему?) с именем класса поиграться как-то так (тут тоже не знаю сработает ли проверка (super is NeedClass) ):
Код AS3:
function myfunc(NeedClass){
 if (super is NeedClass) renturn super.myfunc(NeedClass);
 блаблабла;//код на текущем уровне вложенности
}
Добавлено через 23 минуты
последний вариант рабочий если в сравнении написать так:
if (prototype != NeedClass.prototype) return super.myfunc(NeedClass);


Последний раз редактировалось chabapok; 04.03.2010 в 22:50.