Actionscript:使用事件vs将self传递给Object - 哪个更快,更好?

1 oop reference actionscript-3

我的朋友和我有这样的争论它是在AS3更快地通过另一个目的是能够有之间的通信/交互的两个或如果事件是要走的路.使用事件来完成此任务是非常标准的,这里有一些虚拟代码来说明问题:

   public class ClassA{

   public var items:Array = new Array();
      public function classA(){
        items.push(new ClassB(this));
      }

      public function poke(){
         trace('yes, can i help you?');

         this.items.speak();
      }
   }



   public class ClassB{
      public var parentObject:Object;
      public function classB(pobj:Object){
        parentobject = pobj;
        parentobject.poke();
      }

      public function speak(pobj:Object){
          trace('nothing, forget it!');
      }
   }
Run Code Online (Sandbox Code Playgroud)

因此,如果构造了ClassA,它将把ClassB的新对象推送到其items-Array中.ClassB的构造函数调用Class-A实例的poke(),它立即调用ClassB的speak() - 函数.

我不知道这个方法的正确术语是什么(或者甚至是否存在).我的朋友说他觉得他的代码在使用很多对象时运行得更快,但我对此表示怀疑,因为我认为这可能会使垃圾收集器感到困惑.

您对此主题有何看法?您建议您阅读有关此主题的内容?

Kek*_*koa 8

不同之处在于,事件可以更好地解耦您的课程.阅读有关耦合的信息.

在你提供的代码中,你的B级必须知道A级是什么,而你的A级必须知道你的B级是什么.

对于事件,类需要知道的唯一事情是它可以找到一个对象的实例来添加一个监听器.它不需要知道要调用的函数,也不需要调用除addEventListener之外的任何函数.

调度对象对侦听器一无所知.

事件传递消息的方式摆脱了类的紧密相互依赖性,这可能导致维护和查找错误的问题.最好尽可能少地了解另一个对象.事件很棒,因为调度对象可以在不将函数或内部细节暴露给其他对象的情况下公布正在发生的事情.

请参阅: 松散耦合内聚.