我的一个类的方法动态定义事件处理函数,但我不知道如何从这样的函数访问类的实例。这是一个例子:
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();
答案 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