Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Actionscript:使用事件还是将自身传递给对象-哪个更快、更好?_Actionscript 3_Oop_Reference - Fatal编程技术网

Actionscript 3 Actionscript:使用事件还是将自身传递给对象-哪个更快、更好?

Actionscript 3 Actionscript:使用事件还是将自身传递给对象-哪个更快、更好?,actionscript-3,oop,reference,Actionscript 3,Oop,Reference,我的朋友和我有过这样的争论,在AS3中,将其传递给另一个对象更快,以便能够在这两个对象之间进行通信/交互,或者如果事件是未来的发展方向。虽然使用事件来完成此任务是相当标准的,但以下是一些虚拟代码来说明此问题: public class ClassA{ public var items:Array = new Array(); public function classA(){ items.push(new ClassB(this)); }

我的朋友和我有过这样的争论,在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!');
      }
   }
因此,如果构建了ClassA,它将把ClassB的一个新对象推送到它的items数组中。ClassB的构造函数调用Class-A实例的poke,poke立即调用ClassB的speak函数

我不知道这个方法的正确术语是什么,或者是否有。我的朋友说,他觉得他的代码在使用许多对象时运行得更快,但我对此表示怀疑,因为我认为这可能会混淆垃圾收集器


你对这个主题有什么想法?你建议阅读哪些关于这个主题的资料?

不同之处在于事件可以更好地解耦你的类。了解

在您给出的代码中,您的类B必须知道什么是类a,您的类a必须知道什么是类B

对于事件,类需要知道的唯一一件事是在哪里可以找到对象的实例来向其添加侦听器。它不需要知道要调用什么函数,也不需要调用addEventListener以外的任何函数

分派对象对侦听器一无所知

传递消息的事件方式消除了类之间的紧密依赖关系,这可能会导致维护和错误查找方面的问题。最好尽可能少地了解另一个物体。事件非常重要,因为分派对象可以公开正在发生的事情,而无需向其他对象公开函数或内部细节

见:
而且。

不同之处在于事件可以更好地解耦类。了解

在您给出的代码中,您的类B必须知道什么是类a,您的类a必须知道什么是类B

对于事件,类需要知道的唯一一件事是在哪里可以找到对象的实例来向其添加侦听器。它不需要知道要调用什么函数,也不需要调用addEventListener以外的任何函数

分派对象对侦听器一无所知

传递消息的事件方式消除了类之间的紧密依赖关系,这可能会导致维护和错误查找方面的问题。最好尽可能少地了解另一个物体。事件非常重要,因为分派对象可以公开正在发生的事情,而无需向其他对象公开函数或内部细节

见:
而且。

是的,在代码示例中,您基本上将一个功能单元编写为两个对象。交流的速度可能要快得多,但我不认为这在人类看来是显而易见的


总的来说,这种紧密耦合的方法将严重限制给定应用程序的复杂性,以至于根本不需要优化消息传递速度

是的,在代码示例中,基本上是将单个功能单元编写为两个对象。交流的速度可能要快得多,但我不认为这在人类看来是显而易见的


总的来说,这种紧密耦合的方法将严重限制给定应用程序的复杂性,以至于根本不需要优化消息传递速度

同意kekoav和rhtx的答案,但我还要补充一点,您正在尝试优化一些不需要优化的东西。作为最后一种手段,如果您确实注意到速度减慢,您可能希望替换简单方法调用的事件,但猜测什么可能更快或更慢是毫无意义的。

同意kekoav和rhtx的答案,但我还要补充一点,您正在尝试优化一些不需要优化的东西。作为最后一种手段,如果您确实注意到速度减慢,您可能希望替换简单方法调用的事件,但猜测什么可能更快或更慢是毫无意义的