gpt4 book ai didi

flash - 从子对象引用回父对象

转载 作者:行者123 更新时间:2023-12-01 09:30:01 24 4
gpt4 key购买 nike

我的问题是关于访问子对象父对象的最佳实践。因此,假设一个类实例化另一个类,该类实例现在被一个对象引用。从那个子对象,引用回父对象的最佳方法是什么?目前我知道我经常使用的几种方法,但我不确定是 A) 有更好的方法还是 B) 哪种方法更好

第一种方法是使用 getDefinitionByName,它不会实例化该类,但允许访问其中公开声明的任何内容。

_class:Class = getDefinitionByName("com.site.Class") as Class;

然后根据其父子层次结构引用该变量。
例如,如果 child 试图引用一个比自己高两级的类:

_class(parent.parent).function();

这似乎工作正常,但您需要知道子级与您尝试访问的父级相比所处的级别。

我还可以获得以下语句来将 [object ClassName] 追踪到 Flash 的输出中。

trace(Class);

我不是 100% 执行该行,我没有将其作为引用我所在的当前对象之外的对象的一种方式。

我见过的另一种方法是简单地将对 this 的引用传递到您正在创建的类对象中,然后使用构造函数参数捕获它

var class:Class = new Class(this);  

然后在Class文件中

public function Class(objectRef:Object) {
_parentRef = objectRef;
}

不过,该引用还要求您使用从子到父的层次结构退后一步。

我还可以导入该类,然后使用直接文件路径引用该类内部的方法,而不管它是否是父类。

import com.site.Class;
com.site.Class.method();

当然,父子关系无关紧要,因为我直接通过导入的类访问方法或属性。

我只是觉得我在这里遗漏了一些非常明显的东西。我基本上是在寻找确认这些是否是引用父级的正确方法,如果是这样,哪种方法最理想,或者我是否忽略了其他东西?

最佳答案

一般来说,如果您需要 child 与 parent 交流,您应该考虑通过广播事件来让 child 这样做。这为父级解耦了子级,并且可以让其他类与子级一起工作。

我不建议将对父类的引用传递给子类。

这是一个简单的例子(我已经测试/编译过这个所以可能有一些拼写错误)。

//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

关于flash - 从子对象引用回父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com