Einzelnen Beitrag anzeigen
Alt 16-03-2010, 11:19   #2 (permalink)
Omega Psi
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.134
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:
  1. package
  2. {
  3.     import flash.events.Event;
  4.  
  5.     import mx.controls.CheckBox;
  6.  
  7.     public class SuperCheckBox extends CheckBox
  8.     {
  9.  
  10.         private var _newFunction:Function;
  11.  
  12.         public function get newFunction():Function
  13.         {
  14.             return _newFunction;
  15.         }
  16.  
  17.         public function set newFunction(value:Function):void
  18.         {
  19.             _newFunction = value;
  20.         }
  21.  
  22.         public function SuperCheckBox()
  23.         {
  24.             super();
  25.  
  26.             addEventListener(Event.CHANGE, function(event:Event):void
  27.             {
  28.                var checkBox:SuperCheckBox = SuperCheckBox(event.target);
  29.                if (checkBox.newFunction != null)
  30.                {
  31.                    checkBox.newFunction(checkBox);
  32.                }
  33.             });
  34.         }
  35.     }
  36. }
Wobei ich eher mich frage, wieso du nicht einfach den Eventhandler dort implementierst, wo es passieren soll?
ActionScript:
  1. package
  2. {
  3.  
  4.     import flash.events.Event;
  5.  
  6.     import mx.controls.CheckBox;
  7.  
  8.     public class CheckBoxStrategy {
  9.  
  10.         private var _checkBox:CheckBox;
  11.  
  12.         public function get checkBox():CheckBox
  13.         {
  14.             return _checkBox;
  15.         }
  16.  
  17.         public function set checkBox(value:CheckBox):void
  18.         {
  19.             if (_checkBox)
  20.             {
  21.                 _checkBox.removeEventListener(Event.CHANGE, checkBox_changeHandler)
  22.             }
  23.  
  24.             _checkBox = value;
  25.  
  26.             if (_checkBox)
  27.             {
  28.                 _checkBox.addEventListener(Event.CHANGE, checkBox_changeHandler);
  29.             }
  30.         }
  31.  
  32.         private function checkBox_changeHandler(event:Event):void
  33.         {
  34.             var checkBox:CheckBox = CheckBox(event.target);
  35.  
  36.             handleCheckBoxChangeEvent(checkBox);
  37.         }
  38.  
  39.         private function handleCheckBoxChangeEvent(checkBox:CheckBox):void
  40.         {
  41.             /*
  42.              * Some magic...
  43.              */
  44.         }
  45.     }
  46. }
und die ungarische Notation ist so 80er
Omega Psi ist offline   Mit Zitat antworten