Цитата:
Сообщение от etc
Досточно public-ов. От геттеров проку нет, событие всё равно клонируется постоянно.
|
Цитата:
Сообщение от fljot
Клонируется то клонируется, но это при бабблинге или в разных обработчиках...
|
что-то я, видимо, не понимаю. Не замечал, чтобы событие при баблинге клонировалось. По крайней мере, в дисплейобджектах.
Если все правильно про клонирование, то как/когда это происходит при нативном всплытии события?
Вот пример того, что наблюдаю я:

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Example extends Sprite
{
private var _event:MyEvent;
function Example() {
super();
var s1:Sprite = new Sprite();
var s2:Sprite = new Sprite();
var s3:Sprite = new Sprite();
super.addChild(s1);
s1.addChild(s2);
s2.addChild(s3);
s1.addEventListener(Event.CHANGE, this._test1);
s2.addEventListener(Event.CHANGE, this._test2);
s3.dispatchEvent(new MyEvent(Event.CHANGE, true));
}
private function _test1(e:MyEvent):void {
trace(e.info); //10
trace(this._event === e); //true
}
private function _test2(e:MyEvent):void {
trace(e.info); //5
e.info = 10;
this._event = e;
}
}
}

Код AS3:
package
{
import flash.events.Event;
public class MyEvent extends Event
{
public var info:int;
function MyEvent(type:String, bubbles:Boolean = false, info:int = 5, cancelable:Boolean = false) {
super(type, bubbles, cancelable);
this.info = info;
}
// монжно раскомментить - трейсы те же.
/*override public function clone():Event {
return new MyEvent(super.type, super.bubbles, 20)
}*/
}
}