Flash 分派事件:侦听器是否继承调用方';谁的财产?
我在ActionScript3中注意到,当调用处理程序时,它能够访问senders属性。如果我从自定义类中分派事件。是否所有侦听器都可以继承我的所有公共属性和方法?如果处理程序方法与分派调用定义在同一个类中,则您可以访问这些属性,因为它们在范围中。通常情况并非如此——例如,如果将事件处理程序添加到按钮的“单击”事件中,则您只能通过对该按钮的引用(例如event.target)访问该按钮的属性。如果您更熟悉JS或AS2,那么我理解您为什么会感到困惑——在JS和AS2中,对象的属性很少在方法的范围内(例如,您总是需要使用“this”来访问实例属性) 侦听器不继承这些值,它可以使用Flash 分派事件:侦听器是否继承调用方';谁的财产?,flash,actionscript-3,events,Flash,Actionscript 3,Events,我在ActionScript3中注意到,当调用处理程序时,它能够访问senders属性。如果我从自定义类中分派事件。是否所有侦听器都可以继承我的所有公共属性和方法?如果处理程序方法与分派调用定义在同一个类中,则您可以访问这些属性,因为它们在范围中。通常情况并非如此——例如,如果将事件处理程序添加到按钮的“单击”事件中,则您只能通过对该按钮的引用(例如event.target)访问该按钮的属性。如果您更熟悉JS或AS2,那么我理解您为什么会感到困惑——在JS和AS2中,对象的属性很少在方法的范围内
event.target
属性获取对调度事件的对象的引用,或者使用event.currentTarget
属性获取对事件侦听器注册对象的引用。因此,基本上,您可以使用从事件的target/currentTarget
属性获得的引用来访问发送事件的对象的公共属性
function someFunction():void
{
//abc is local variable and inaccessible outside someFunction
var abc:ABC = new ABC();
abc.prop = "someValue";
abc.addEventListener(Event.TYPE, handleEvent);
}
function handleEvent(e:Event):void
{
//get a reference to the object that was declared
//in someFunction using the event.currentTarget.
var abc:ABC = ABC(e.currentTarget);
trace(abc.prop);//traces someValue
}
//some where in the ABC class:
this.dispatchEvent(new Event(Event.TYPE));
如果您想知道,
event.target
和event.currentTarget
属性可能不同。将单击事件侦听器添加到精灵中,并单击精灵内部的文本字段(它是精灵的子项),然后检查target
和currentTarget
的值。目标将是文本字段,当前目标将是精灵本身 我没有用正确的词。我知道它们不会继承属性和方法。我的意思是调度发送了一个可以使用的引用。
function someFunction():void
{
//abc is local variable and inaccessible outside someFunction
var abc:ABC = new ABC();
abc.prop = "someValue";
abc.addEventListener(Event.TYPE, handleEvent);
}
function handleEvent(e:Event):void
{
//get a reference to the object that was declared
//in someFunction using the event.currentTarget.
var abc:ABC = ABC(e.currentTarget);
trace(abc.prop);//traces someValue
}
//some where in the ABC class:
this.dispatchEvent(new Event(Event.TYPE));