Вызов закрытой функции из внешнего файла ActionScript3 - PullRequest
1 голос
/ 06 июля 2010

Как мне вызвать приватную функцию из внешнего документа 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. Как правильно объявить и запустить?

Ответы [ 3 ]

1 голос
/ 06 июля 2010

Единственный способ получить доступ к закрытой функции - это объявить ее как публичную или ввести дополнительную функцию и объявить ее как публичную.

Атрибут private предназначен для ограничения доступа только к этому классу.

Что вы можете сделать, это создать функцию protected, которая подклассирует ваш класс FaceDetector и предоставляет вам доступ, но, возможно, не так, как вы хотите его использовать.

При более близкомосмотр вы используете приватный конструктор (если это не ваш пакет), который предотвращает создание экземпляров из других классов, поэтому я не уверен, что вы действительно пытаетесь выполнить.

Если это была обычная частная функция (неконструктор), вы также можете зарегистрировать его, чтобы прослушивать события и отправлять событие оттуда, где вам это нужно.

Единственный известный мне способ использования частных конструкторов, отличных от служебных классов, - это Singletons, и этоневозможно даже сделать в ActionScript 3 (частные конструкторы)

1 голос
/ 06 июля 2010

Из вашего примера кода функция FaceDetector является конструктором класса FaceDetector.Это означает, что он вызывается, когда вы создаете новый экземпляр FaceDetector, например,

var faceDetectorInstance:FaceDetector = new FaceDetector();

ваш конструктор должен быть открытым, а не частным.AS3 не поддерживает частные конструкторы.

вы должны сделать ваш метод initDetector публичным, чтобы вы могли вызывать его напрямую, например

public function initDetector():void 
{
    //Do Stuff Here...
}
0 голосов
/ 06 июля 2010

Во-первых, вы не можете позвонить в закрытый класс. Закрытое ключевое слово предназначено для предотвращения вызова функции внешними классами, включая подклассы.

Во-вторых, FaceDetector имеет то же имя, что и класс. Это означает, что он является конструктором и автоматически вызывается при создании нового экземпляра класса.

PS. Конструкторы в ActionScript 3.0 должны быть общедоступными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...