代码之家  ›  专栏  ›  技术社区  ›  artaxerxe

为什么不允许从ActionScript(Flex4)中的本地事件处理程序访问成员函数?

  •  0
  • artaxerxe  · 技术社区  · 14 年前

    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);
        }
    

    错误是:

    TypeError:错误#1006:导出不是函数。at Function/()[C:\Users\User\Adobe Flash Builder 4\agriculturalAdministration\src\certificate\one\CertificateBuilder1.as:150] * 有人能解释一下为什么会这样吗?

    1 回复  |  直到 14 年前
        1
  •  4
  •   aib    14 年前

    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);
    }