Anonyme Funktionen sind nicht im namespace der Klasse registriert, sondern im anonymen namespace. Das heisst, die Funktion kennt ihre Umgebung - die Klasse - nicht. Das Binding der Funktion an die Klasse wird durch ein Closure implementiert. So kann die Funktion überhaupt erst von dem Dispatcher als "eigene" Methode verwendet werden.
Dein Problem ist, dass der Scope der Funktion nicht, wie augenscheinlich, die Funktion in der sie definiert wurde ist, sondern wie gesagt anonym ist. Ein bessere Implementierung wäre:
ActionScript:
package
{
import flash.events.Event;
import mx.controls.CheckBox;
public class SuperCheckBox extends CheckBox
{
private var _newFunction:Function;
public function get newFunction():Function
{
return _newFunction;
}
public function set newFunction(value:Function):void
{
_newFunction = value;
}
public function SuperCheckBox()
{
super();
addEventListener(Event.CHANGE, function(event:Event):void
{
var checkBox:SuperCheckBox = SuperCheckBox(event.target);
if (checkBox.newFunction != null)
{
checkBox.newFunction(checkBox);
}
});
}
}
}
Wobei ich eher mich frage, wieso du nicht einfach den Eventhandler dort implementierst, wo es passieren soll?
ActionScript:
package
{
import flash.events.Event;
import mx.controls.CheckBox;
public class CheckBoxStrategy {
private var _checkBox:CheckBox;
public function get checkBox():CheckBox
{
return _checkBox;
}
public function set checkBox(value:CheckBox):void
{
if (_checkBox)
{
_checkBox.removeEventListener(Event.CHANGE, checkBox_changeHandler)
}
_checkBox = value;
if (_checkBox)
{
_checkBox.addEventListener(Event.CHANGE, checkBox_changeHandler);
}
}
private function checkBox_changeHandler(event:Event):void
{
var checkBox:CheckBox = CheckBox(event.target);
handleCheckBoxChangeEvent(checkBox);
}
private function handleCheckBoxChangeEvent(checkBox:CheckBox):void
{
/*
* Some magic...
*/
}
}
}
und die ungarische Notation ist so 80er