AS3的事件主要是使用了EventDispatcher来实现,大大优化了程序结构,然而编码却有些麻烦,如添加事件,广播事件,移除事件等. 而且在某些异步操作个人感觉不是很方便.于是我想到了一个办法采用函数指针的方式[我学C留下的"后遗症"],在适当的时候直引用这个函数执行相应的方法. 具体代码如下:
1. 先建一个类Base.as,它主要作广播事件.
Base.as代码
- package
- {
- public class Base
- {
- // 中转调用.
- public var loadFinished:Function;
- public function Base():void{
- //...
- }
- /**
- * 异步处理方面的逻辑....
- */
- public function load():void{
- Dispatcher();
- }
- /**
- * 如果完成了,广播事件.
- */
- private function Dispatcher():void{
- try{
- loadFinished();
- }catch(e:Error){
- trace("引用的函数不存在.");
- };
- }
- }
- }
2. 再建一个类Demo.as,它使用Base.as中的方法和逻辑,Base执行完成任务之后它会将处理流程递给Demo.as
Demo.as代码
- package {
- import flash.display.Sprite;
- public class Demo extends Sprite
- {
- public function Demo()
- {
- var demo:Base=new Base();
- demo.loadFinished=hello;
- demo.load();
- }
- /**
- * 流程执行到此.
- */
- private function hello():void{
- trace("Hello World");
- }
- }
- }
这种方法是纯C中的函数指针类似的应用, 在AS3中可以避免事件注册,侦听,移除等.但是它却无法避免引起程序逻辑处理的复杂性. 所以建议在程序设计中还是采用AS3的事件机制, 但是这种方法在一些特殊情况下使用起来简洁方便.