如果我有文档类:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public function Main() {
}
public function SomeRandomMethod():void {
}
}
}
如何从这里调用SomeRandomMethod:
package {
public class AnotherClass {
public function AnotherClass() {
}
public function AnotherRandomMethod():void {
/* I need to use SomeRandomMethod here */
}
}
}
答案 0 :(得分:3)
有几种方法可以实现这一目标。一种方法是将文档类的引用传递给另一个类的构造函数:
package {
public class AnotherClass {
private var _doc:Main
public function AnotherClass(doc:Main) {
_doc = doc;
}
public function AnotherRandomMethod():void {
_doc.SomeRandomMethod();
}
}
}
或函数本身
package {
public class AnotherClass {
public function AnotherClass() {
}
public function AnotherRandomMethod(doc:Main):void {
doc.SomeRandomMethod();
}
}
}
您还可以通过声明全局静态变量并为其分配文档类来使用单例设计模式。虽然单身人士被视为anti-pattern。例如:
package {
import flash.display.MovieClip;
public class Main extends MovieClip {
public static var instance:Main;
public function Main() {
instance = this;
}
public function SomeRandomMethod():void {
}
}
}
然后
package {
public class AnotherClass {
public function AnotherClass() {
}
public function AnotherRandomMethod():void {
Main.instance.AnotherRandomMethod();
}
}
}
另一种方法是使用服务定位器模式(尽管有些人将其视为反模式)。 http://gameprogrammingpatterns.com/service-locator.html