Вызывание закрытой функции из внешнего Файла ActionScript3

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

1
задан pad 2 January 2012 в 15:06
поделиться

3 ответа

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

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

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

0
ответ дан 2 September 2019 в 23:17
поделиться

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

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

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

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

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

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

1
ответ дан 2 September 2019 в 23:17
поделиться

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

var faceDetectorInstance:FaceDetector = new FaceDetector();

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

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

public function initDetector():void 
{
    //Do Stuff Here...
}
1
ответ дан 2 September 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: