2010-07-05 72 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... 
}