Hallo,
anstatt solche Weisheiten für Dich zu behalten solltest Du Dich gleich ans Werk machen und einen ausgedehnten Featuere-Artikel schreiben, damit die anderen auch was davon haben ;). Das ist kein Joke, soetwas fehlt hier im Selfraum wirklich (finde ich).
Mein Beitrag zur prototypischen Diskussion :
In JavaScript kann eine klassenbasierende Vererbung nicht umgesetzt werden, da es keine Klassen gibt, denn es fehlt an ausreichender Typisierung. Zudem können Objekte zur Laufzeit um Methoden und Eigenschaften beliebig erweitert werden. Dies sind zwei wesentliche Aspekte, warum JS kein Klassenkonzept kennt. Dennoch läßt sich über die prototypische Vererbung (von der Stanford Univerity für die Programmiersprache self entwickelt) eine Generalisierung und Spezialisierung umsetzen. Prototypische Objekte werden durch die Konstruktor-Methode new erzeugt. Dabei enthält das neu erzeugte Objekt lediglich einen Verweis auf den Prototypen. Prototypische Vererbung wird realisiert, indem man den prototypischen Verweis des Prototypen auf ein prototypisches Objekt zeigen läßt. Da es jeweils nur einen prototypischen Verweis gibt, sind Mehrfachvererbungen ausgeschlossen.
function Tier() //- Prototyp Tier
{
this.belle = belle; //- Methode
}
Mensch.prototype = new Tier();
function Mensch() //- Prototyp Mensch
{
}
var ich = new Mensch(); //- Objekt ich besitzt nur einen prototypischen Verweis (auf Mensch);
ich.belle();
Erklärung :
belle ist keine Methode des Objektes ich. Das Objekt ich besitzt lediglich einen Verweis auf den Prototypen Mensch (und der wiederum auf Tier). Der Interpreter sucht im Protypen Mensch nach der Methode belle. Wird er nicht fündig, so zieht er den prototypischen Verweis von Mensch, der auf den Prototypen Tier zeigt, für die Anforderungsuntersuchung heran.
Im IE kann über den operator instanceof ermittelt werden, ob ein Objekt von einem bestimmten Prototypen erbt.
if (ich instanceof Tier)
alert("ich stamme vom Tier ab");
Beim NS steht dieser Operator nicht zur Verfügung. Hier muß eine Funktion geschrieben werden, welche sämtliche prototypische Verweise auf Vererbungsabhängigkeiten hin untersucht. Dazu kann direkt auf den prototypischen Verweis __proto__ zugegriffen werden.
function instanceof(obj, proto)
{
while (obj != null)
{
if (obj == proto.prototype)
return true;
else
obj = obj.__proto__;
}
}
if (instanceof(ich, Mensch))
alert("Laut NS stamme ich vom Tier ab");
Siehe auch vergleichende Lektüre : Internet World 08/2001 S. 86 die Macht der Objekte von Cai Ziegler.
gruß
tim