2010-07-05 25 views
1

如何从外部ActionScript3文档调用私有函数?我在Flash Builder 4中工作,我需要从外部AS3文档调用一个私有函数。我想我已经正确导入了....从外部ActionScript3调用私有函数文件

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

首先,你不能调用私人类。 private关键字的用途是阻止外部类,包括调用该函数的子类。

其次,FaceDetector与该类具有相同的名称。这意味着它是构造函数,并在创建类的新实例时自动调用它。

PS。 ActionScript 3.0中的构造函数必须公开

1

访问私有函数的唯一方法是将其声明为public或引入额外的函数并将其声明为public。

private属性旨在限制对该类的访问。

你可以做的是创建一个protected函数,它的子类为FaceDetector类,它可以让你访问,但可能并不像你想要的那样使用它。

进一步检查,你正在使用一个私人的构造函数(除非这不是你的包),它阻止其他类的实例化,所以我不知道你真的想要完成什么。

如果是一个普通的私有函数(不是构造函数),你也可以注册它来监听事件,并从任何你需要的地方派发事件。

我知道的使用除公用事业类其他私有的构造,唯一正确的方法是单身,并且甚至不能在ActionScript 3(私有构造函数)

1

从你的示例代码来完成,FaceDetector函数的构造器FaceDetector类。这意味着当您构造一个FaceDetector的新实例时会调用它,例如

var faceDetectorInstance:FaceDetector = new FaceDetector(); 

您的构造函数应该是public而不是private。 AS3不支持私有构造函数。

你应该使你的initDetector方法公开,所以你可以直接调用它,例如,

public function initDetector():void 
{ 
    //Do Stuff Here... 
}