То, что я пытаюсь сделать, немного странно, но мне интересно, может ли кто-нибудь придумать умный способ сделать то, что я хочу сделать.По сути, я хочу переопределить именованную функцию во время выполнения.Я могу сделать это с помощью анонимных функций, но я не могу найти способ сделать это для именованных функций.Я хочу сделать это так, чтобы я мог реализовать «шпионскую» функциональность для объекта для инфраструктуры тестирования (порт Jasmine to Flex).
Возьмем, к примеру, этот класс:
public class TestClass
{
public var anonymous:Function = function():void {
trace("original anonymous");
};
public function named():void {
trace("original named");
}
}
Я могу легко переопределить анонимную функцию, потому что это просто переменная.Javascript часто использует эту идиому.
var testClass:TestClass = new TestClass();
testClass.anonymous = function():void { trace("overridden anonymous"); }
НО, когда я делаю то же самое для именованных функций, вы получаете ошибку во время компиляции:
// Does not compile
testClass.named = function():void { trace("overridden named"); }
Я пытался сделать это немного более "мягким", ноэто приводит к сбою во время выполнения «Невозможно назначить метод, названный в TestClass».
// Compiles with runtime failure
testClass["named"] = function():void { trace("overridden named"); }
Может кто-нибудь более умный, чем я, придумал способ взломать это?Можно ли перехватить байт-код?Что-то?