2012-04-04 13 views
1

ich die Definition dieser Funktion in einer meiner Klassen:Übergeordnete Funktion von einer anderen Klasse

public function onUse():void {}; 

Dann in einem anderen meiner Klassen (nennen wir es „Klasse 2“), erstelle ich ein Objekt dieser Klasse, und dann wollen Sie diese Funktion mit einer anderen überschreiben. Nach einiger Google-Fu, ich habe dies gefunden und verwendet es ...

button.onUse { 
    variable = value; 
} 

... aber es führt sofort, und nicht, wenn onUse() aufgerufen wird - die eine leere Funktion zu sein scheint, immer .

Ich habe nichts mehr als das gefunden - ich habe ein paar Dinge selbst versucht, wie zum Beispiel eine Funktion in class2 und button.onUse = function();, aber es wirft immer Fehler.

Kann mir jemand sagen, ob das, was ich versuche, tatsächlich möglich ist, und wenn ja, wie kann ich es tun?

+0

Dies ist eine sehr grundlegende objektorientierte Programmierung.Es ist in Ordnung, wir müssen alle irgendwo anfangen. Ich schlage vor, dass Sie sich selbst zu diesem Thema dokumentieren, damit Sie auf festem Boden beginnen können. Ich habe jedoch keinen guten Bezug, um damit zu beginnen, aber ich bin mir ziemlich sicher, dass ein guter Samariter hier ein paar wirklich schöne hat, die man teilen kann. – Exort

Antwort

3

Sie können nur Funktionen außer Kraft setzen, wenn Sie die Klasse erweitern:

public class A { 
    public function foo():void { 
     doStuff(); 
    } 
} 

public class B extends A { 
    override public function foo():void { 
     doOtherStuff(); 
    } 
} 

var n:A = new A(); 
n.foo(); // => calls doStuff(); 

var o:B = new B(); 
o.foo(); // => calls doOtherStuff(); 

daher eine andere Funktion zu einer Klassenmethode einer Instanz Zuordnung zur Laufzeit nicht möglich.

Sie können jedoch Ihre ursprüngliche Klasse ein Feld des Typs Function enthalten und dann einfach einen anderen Abschluss zuweisen.

public class A { 
    public var foo:Function; 
} 

var n:A = new A(); 
n.foo = function():void { 
    doStuff(); 
}; 
n.foo(); // => calls doStuff(); 

var o:A = new A(); 
o.foo = function():void { 
    doOtherStuff(); 
} 
o.foo(); // => calls doOtherStuff(); 
+0

Das habe ich gebraucht - danke! – Suyooo

0

Überprüfung der Syntax der

button.onUse { 
    variable = value; 
} 

eine Funktion würde als

öffentliche Funktion onUse() definiert werden: void {};

und überschrieben mit

override public function onUse():void { 
} 

in einer anderen Klasse

die Art und Weise Sie versuchen, es zu tun, stellt keine Funktion überschreiben.

Was ich unter ähnlichen Umständen getan haben, ist eine onClickFunction Funktion im

public var onClickFunction:Function = null; 

Klasse erstellen und dann in der CLICK Funktion Ereignis-Listener hinzufügen

if(onClickFunction != null){ 
    onClickFunction(); 
} 

dann können Sie Ihre on- zuweisen klicken Sie auf Funktionalität, indem Sie so etwas tun

button.onClickFunction = function(): void { variable = wert; // dostuff }

Dies ist nicht der beste Weg, es zu tun, aber wahrscheinlich der einfachste Weg, um die Funktionalität zu implementieren. Und im Idealfall würden Sie die Vererbung so verwenden, wie es der Raumaspirat vorgeschlagen hat.

Verwandte Themen