我的问题是关于访问子对象父级的最佳实践.因此,假设一个类实例化另一个类,该类实例现在用一个对象引用.从那个子对象,引用回父对象的最佳方法是什么?目前我知道我经常使用的几种方式,但我不确定A)是否有更好的方法来做到这一点或B)哪一种是更好的做法
第一种方法是使用getDefinitionByName,它不会实例化该类,但允许访问其中公开声明的任何内容.
_class:Class = getDefinitionByName("com.site.Class") as Class;
然后根据其父到子层次结构引用该变量.
例如,如果孩子试图引用一个比自身高两级的类:
_class(parent.parent).function();
这似乎工作正常,但您需要知道孩子所处的级别与您尝试访问的父级别的级别.
我还可以使用以下语句将[object ClassName]追踪到Flash的输出中.
trace(Class);
我不是100%执行该行,我没有把它作为一种方法来引用我当前对象之外的对象.
我看到的另一种方法是简单地将对此的引用传递给您正在创建的类对象,并使用构造函数参数捕获它
var class:Class = new Class(this);
然后在类文件中
public function Class(objectRef:Object) { _parentRef = objectRef; }
该引用还要求您使用子级到父级层次结构进行备份.
我也可以导入该类,然后使用直接文件路径引用该类内部的方法,无论它是否为父类.
import com.site.Class; com.site.Class.method();
当然,父子关系是无关紧要的,因为我直接通过导入的类访问方法或属性.
我觉得我错过了一些非常明显的东西.我基本上是在寻找确认,如果这些是引用父母的正确方法,如果是这样,哪个是最理想的,还是我过分看待别的东西?
一般来说,如果您需要孩子与父母沟通,您应该通过广播事件来考虑这样做.这将子项与父项分离,并使其他类可以与子项一起使用.
我不建议将对父类的引用传递给子代.
这是一个简单的例子(我已经测试/编译了这个,所以可能会有一些拼写错误).
//Child.as package { import flash.events.EventDispatcher; import flash.events.Event; public class Child extends EventDispatcher { public function doSomething():void { var e:Event = new Event(Event.COMPLETE); dispatchEvent(e); } public function foo():void { trace("foo"); } } } //Parent.as package { import flash.display.Sprite; import flash.events.Event; public class Parent extends Sprite { private var child:Child; public function Parent():void { c = new Child(); c.addEventListener(Event.COMPLETE, onComplete); c.foo();//traces foo c.doSomething() } public function onComplete(e:Event):void { trace("Child broadcast Event.COMPLETE"); } } }
在大多数情况下,您将调度自定义事件并使用它们传递数据.
基本上:
Parent引用了Child并通过方法调用进行通信.Child没有引用Parent,并通过调度事件与任何人通信.
希望有帮助......
迈克室
mesh@adobe.com