Есть способ сделать то, что вы хотите сделать, но прежде чем я объясню это, я хотел бы сказать несколько вещей:
1) Это НЕ лучшая практика - есть причина, по которойкод работает так, как работает, и каждый раз, когда вам кажется, что вам нужно полностью изменить работу AS3 (например, путем изменения класса на динамический во время выполнения), тогда очень полезно сесть и выяснить,действительно лучшее, что можно сделать.Скорее всего, существует существующий шаблон проектирования, который поможет вам решить конкретную проблему, которую вы пытаетесь решить.
2) Если вы используете секреты, которыми я собираюсь поделиться с вами, то он станет рядом сдругие пользователи не могут понять ваш код.Может быть, вы работаете соло над хобби-проектом, и это хорошо - но если вы в команде, или если вы один из множества людей, делающих обновления для очень сложного проекта, будьте готовы ко всем, кто прикасаетсяэтот код после того, как вы прокляли свое имя.:)
Что сказал, готов?
Вы можете изменить поведение класса, изменив его свойство .prototype.Например, допустим, у меня есть класс MyClass, который имеет только один метод, «myMethod ()».Но по какой-то причине во время выполнения мне нужно добавить новый метод ("myNewMethod ()") в класс.
Я делаю это, создавая функцию с именем "myNewMethod ()" в любом классе, где яработая в. Затем я передаю ссылку на эту функцию в прототип MyClass.Обратите внимание, что, поскольку вы изменяете правила здесь, вам придется использовать строковые литералы в качестве имен функций, чтобы избежать ошибок компилятора.
Вот пример кода:
var test1:MyClass = new MyClass();
test1.myMethod() // works just fine
test1.anotherMethod() // compiler error - this method does not exist in MyClass! Can't compile.
MyClass.prototype["anotherMethod"] = function ():void { trace("anotherMethod!"); }
test1.anotherMethod(); // error - as far as the compiler knows, anotherMethod doesn't exist. Still can't compile.
test1["anotherMethod"]() // this works!
Довольнокруто, да?
Тем не менее, НЕ ДЕЛАЙТЕ ЭТОГО В ПРОИЗВОДСТВЕННОМ КОДЕКСЕ, ЕСЛИ ВЫ НЕ ЗНАЕТЕ, ЧТО ВЫ ДЕЛАЕТЕ!Есть лучшие способы достижения подобных результатов, и ваши товарищи по команде, вероятно, будут вам благодарны.