Rheinwerk Design < openbook > Rheinwerk Design - Know-how für Kreative.
Know-how für Kreative

 << zurück
ActionScript 1 und 2 von Sascha Wolter (http://www.saschawolter.de/)
Objektorientierung und Codedesign mit Flash MX 2004
Buch: ActionScript 1 und 2

ActionScript 1 und 2
672 S., mit CD, Referenzkarte, 44,90 Euro
Rheinwerk Design
ISBN 3-89842-221-6
gp Kapitel 14 Vererbung
  gp 14.1 Klassen
    gp 14.1.1 Von Klassen und Prototypen
  gp 14.2 Evolution und Spezialisierung
  gp 14.3 Erben von Fähigkeiten
  gp 14.4 Erben von Eigenschaften
  gp 14.5 prototype, __proto__ und super
  gp 14.6 Alternative


Rheinwerk Design - Zum Seitenanfang

14.5 prototype, __proto__ und super  toptop

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 14.3   Die Eigenschaften proto und prototype bei Klassen und Instanzen

prototype

Die als Vererbung bezeichnete Arbeitsweise von ActionScript bedient sich eines Konzeptes namens Prototypenkette (auch proto-chain genannt). Jedes Funktionsobjekt besitzt als Eigenschaft ein Prototyp-Objekt (prototype). Diesem Prototyp-Objekt weisen Sie die Methoden oder Eigenschaften zu, die für alle Instanzen einer Klasse gelten sollen:

function Klasse() {
}
Klasse.prototype.eigenschaft = "wert";
Klasse.prototype.methode = function() {
};

Bitte beachten Sie, dass die Eigenschaften im Prototyp-Objekt für alle Instanzen einer Klasse den gleichen Wert beinhalten (z.B. für einen Zähler die Anzahl an Instanzen).

proto

Jede Instanz dieser Klasse erhaelt automatisch eine proto -Eigenschaft, die auf den Prototyp der Konstruktorfunktion zeigt (siehe Abbildung). Wenn Sie nun eine Methode oder eine Eigenschaft bezueglich einer Instanz verwenden, sucht Flash zuerst direkt in der Instanz nach dieser. Sollte sich die gesuchte Methode oder Eigenschaft nicht direkt in der Instanz befinden, dann setzt Flash die Suche in dem Prototypen fort, der in proto -Eigenschaft angegeben ist:

function Klasse() {
}
Klasse.prototype.methode = function() {
};
//
instanz = new Klasse();
// Alles dasselbe
instanz.methode();
instanz.__proto__.methode();
Klasse.prototype.methode();

Die Anweisungen in dem vorherigen Skript machen alle dasselbe mit den folgenden Besonderheiten. Die Anweisung instanz.methode(); führt direkt über die Prototypenkette zur Methode, da in der Instanz selber diese Methode ja nicht definiert ist. Die Anweisung instanz.__proto__.methode(); zeigt direkt auf die Methode im Prototypen und führt diese im Kontext der Instanz aus. Dies unterscheidet diese und die letzte Variante. Denn die letzte Anweisung bezieht sich zwar auch auf diese Funktion, ruft sie aber im Kontext des Prototypen-Objektes auf und hat nichts mehr mit der Instanz zu tun.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 14.4   Die Eigenschaften proto und prototype ermöglichen in ActionScript die Vererbung von Fähigkeiten.

Die Vererbung macht sich das Verhalten von Flash bei der Suche nach Eigenschaften und Methoden zunutze und packt einen Zeiger auf den Prototypen der Oberklasse in die __proto__-Eigenschaft der Unterklasse (siehe Abbildung 14.4). So setzt Flash die Suche nach Methoden und Eigenschaften in der Oberklasse fort, wenn es diese Elemente nicht bereits in der Instanz oder der Unterklasse gefunden hat. Auf diese Art und Weise kann die Prototypenkette beliebig verlängert werden:

function Oberklasse() {
}
Oberklasse.prototype.eigenschaft = "Eigenschaft von Oberklasse";
function Unterklasse() {
}
Unterklasse.prototype = new Oberklasse();
instanz = new Unterklasse();
// Alles dasselbe
trace(instanz.eigenschaft); // Sucht in Instanz
trace(instanz.__proto__.eigenschaft); // Sucht in Prototyp der Unterklasse
trace(instanz.__proto__.__proto__.eigenschaft); // Sucht in Prototyp der Oberklasse
Zugriff auf Methoden/Eigenschaften

Sollten Sie also einmal explizit auf eine Methode oder Eigenschaft irgendwo in der Prototypenkette zugreifen müssen, dann gelingt das – die Kenntnis über die genaue Lage in der Prototypenkette vorausgesetzt – durch die direkte Angabe des __proto__-Pfades in der Form:

meineInstanz.__proto__.__proto__.methode();
super-Operator

Eine ähnliche Funktion wie das von Macromedia verpönte __proto__ übernimmt der super-Operator. Dieser stellt den Bezug zum Prototypen einer Oberklasse her. Die Angabe von super(argumente); ruft dabei die Konstruktormethode der Oberklasse auf. super.methode(argumente); bezieht sich auf die Methode einer Oberklasse. Im Gegensatz zu __proto__ ist der Einsatz von super jedoch auf die Methoden und den Konstruktor der Unterklasse beschränkt.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 14.5   Die Verwendung von dem super-Operator

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: ActionScript 1 und 2
ActionScript 1 und 2
bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: jQuery






 jQuery


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern