如何从外部ActionScript3文档调用私有函数?我在Flash Builder 4中工作,我需要从外部AS3文档调用私有函数。我想我已经正确导入了它......
import myapp.utils.WebcamFaceDetector;
import myapp.utils.FaceDetector;
但我想从“FaceDetector”调用一个函数。这是FaceDetector中代码的一部分...
public class FaceDetector
{
private var detector :ObjectDetector;
private var options :ObjectDetectorOptions;
private var faceImage :Loader;
private var bmpTarget :Bitmap;
private var view :Sprite;
private var faceRectContainer :Sprite;
private var tf :TextField;
private function FaceDetector() {
initDetector();
}
//...
}
我想调用“私有函数FaceDetector()”来启动另一个AS3文件中的某个点。如何正确声明并让它运行?
答案 0 :(得分:1)
访问私有函数的唯一方法是将其声明为public或引入额外函数并将其声明为public。
private
属性旨在仅限制对该类的访问。
您可以做的是创建一个protected
函数,该函数将您的FaceDetector
类子类化,并为您提供访问权限,但可能不是您想要使用它的方式。
仔细检查一下,你使用私有构造函数(除非这不是你的包),这会阻止其他类的实例化,所以我不确定你真正想要实现的目标。
如果是一个普通的私有函数(不是构造函数),你也可以注册它来监听事件,然后从你需要的地方发送事件。
我知道使用除实用程序类之外的私有构造函数的唯一正确方法是单例,甚至不能在ActionScript 3(私有构造函数)中完成
答案 1 :(得分:1)
从您的示例代码中,FaceDetector
函数是FaceDetector类的构造函数。这意味着在构造FaceDetector的新实例时会调用它,例如
var faceDetectorInstance:FaceDetector = new FaceDetector();
你的构造函数应该是public而不是private。 AS3不支持私有构造函数。
你应该公开你的initDetector方法,所以你可以直接调用它。例如。
public function initDetector():void
{
//Do Stuff Here...
}
答案 2 :(得分:0)
首先,你不能打电话给私人班级。 private关键字的目的是阻止外部类,包括子类调用函数。
其次,FaceDetector与该类具有相同的名称。这意味着它是构造函数,并在您创建类的新实例时自动调用。
PS。 ActionScript 3.0中的构造函数必须是公共的