从动态声明的函数访问所有者对象

时间:2013-06-02 12:17:37

标签: actionscript-3 flash flex dynamic actionscript

我的一个类的方法动态定义事件处理函数,但我不知道如何从这样的函数访问类的实例。这是一个例子:

public dynamic class SomeClass
{
    public function SomeClass():void
    {
    }

    public function someMethod1():void
    {
    }

    public function someMethod2(eventType:String):void
    {
        var funcName:String = "func" + eventType;
        if (this[funcName] == null)
        {
            this[funcName] = function(event:*):void
                {
                    // this.someMethod1() is not working
                    // "TypeError: Error #1006: someMethod1 is not a function.                       
                };
        }
        this[funcName]("SOME_EVENT_TYPE");
    }
}

// ...

var instance:SomeClass = new SomeClass();
instance.someMethod2();

1 个答案:

答案 0 :(得分:2)

编辑1:

当我阅读你的评论时,有一种更优雅的方式,因为我受到你使用this的影响我保留它但是使用this并非强制性的,在你的情况下只需删除{ {1}}关键字和直接调用您的方法它将起作用:

this

从我看到你将事件监听器附加到public dynamic class SomeClass { public function someMethod1():void { } public function someMethod2(eventType:String):void { var funcName:String = "func" + eventType; if (this[funcName] == null) { this[funcName] = function(event:*):void { // just call someMethod1() it will be bound to your instance someMethod1(); // here use it as you wish // this.someMethod1() is not working // "TypeError: Error #1006: someMethod1 is not a function. }; } this.someEventDispatcher.addEventListener(eventType, this[funcName]); } } 所以当你的事件触发someEventDispatcher进入你的事件处理程序时,将引用this而不是{{1}的实例}}

您可以将实例的引用保存到变量中,以便将其用于事件处理程序:

someEventDispatcher