Почему не разрешен доступ к функции-члену из моего локального обработчика событий в ActionScript (Flex4)? - PullRequest
0 голосов
/ 05 августа 2010

Мой код выглядит так:

private function createExportButton() : void {
        var exportButton : Button = new Button();
        exportButton.label = "Export";
        exportButton.x = 600;
        exportButton.y = 10;
        exportButton.addEventListener(MouseEvent.CLICK, function
                                           clickHandler(e : MouseEvent) : void {
            this.export();
        });
        super.addElement(exportButton);
    }

Ошибка:

* Ошибка типа: Ошибка № 1006: экспорт не является функцией. в функции / () [C: \ Users \ Пользователь \ Adobe Flash Builder 4 \ сельскохозяйственное управление \ src \ certificate \ one \ CertificateBuilder1.as: 150] * Может кто-нибудь объяснить мне, почему это? Заранее спасибо!

1 Ответ

4 голосов
/ 05 августа 2010

clickHandler() не является функцией-членом, она не принадлежит ни одному классу.Это анонимная функция.Таким образом, он не принадлежит экземпляру.

Однако, если я правильно помню, вы должны иметь возможность ссылаться на переменные в пределах объема (например, exportButton) изнутри.В этом случае вы можете присвоить ссылку на класс переменной и использовать ее вместо this:

var exportButton:Button = new Button();
var this_:SomeClass = this;
...
addEventListener(..., function clickHandler(e:MouseEvent):void {
    this_.export();
});

Или вы можете просто сделать clickHandler() функцией-членом:

private function clickHandler(e:MouseEvent):void
{
    this.export();
}

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