Hi Stefan und Uschi,
Erkenntnistheorie, und zwar im vorliegenden Fall platonische Ideenlehre.
Mmh, sagt mir jemand, was Erkenntnistheorie ist?
Ein Problem in der Programmierdidaktik ist nämlich sicherlich, daß immer davon ausgegangen wird, die Adressaten der Handbücher seien fit in Mathe.
Das ist mir auch schon aufgefallen. Mir ist aber trotzdem nichts besseres eingefallen. Beispiele aus dem realen Leben sind meist viel zu komplex, als dass man sie fuer eine einfache Einfuehrung heranziehen koennte. Und mal ehrlich, wer sich mit OOP beschaeftigt, dem sollte es an so ein bisschen Allgemeinwissen nicht mangeln.
Warum ich eigentlich hier antworte:
Kann man sagen, daß es sich bei
Bild = new Image();
Bild.src = "datei.gif";
um die Instanz eines Objekts handelt, auf die noch nicht Bezug genommen wurde?
Image ist die (Objekt-)Klasse, Bild ist eine Instanz davon. Die Klasse ist die *Beschreibung* eines Typs von Ding, eine Instanz ist sozusagen die (bzw. eine) Existent-Werdung dieses Typs. Es gibt z.B. die Klassen Frau und Mann, und es gibt jeweils ca. 3 Mrd. Instanzen dieser Klassen auf der Erde. (Wow, das ist ein Weltbild! *g*)
document.images[0].src = Bild.src;
Dann wird da auch auf eine Instanz des Image-Objekts Bezug genommen, aber auf eine, die nicht mit JavaScript erzeugt wurde, sondern bereits da ist, weil es eine Grafik in der HTML-Datei gibt, die mit <img src="irgendwas.gif"> notiert ist.
Yepp. Der Browser erzeugt beim Einlesen der Datei automatisch entsprechende Instanzen in der JS-Welt.
Aber was habe ich erzeugt, wenn ich irgendwo weiter unten schreibe
guterFreund = new friends("Nepomuk", "Schnibbeldick", "103");
Eine Instanz der Idee function oder eine Instanz der Instanz friends? Oder beides?
friends ist die Klasse, guterFreund eine Instanz davon.
Das seltsame Konstrukt mit dem this.name = name ist wirklich ziemlich platonisch. Es ist halt die programmiersprachentechnische Konvention, um Objekte als solche zu deklarieren.
Ja, leider keine besonders gluecklich gewaehlte Syntax.
Der JavaScript-Interpreter weiss dadurch, dass es fuer ihn ein Objekt mit diesem Namen (friends) gibt, das verschiedene Eigenschaften hat (vorname, nachname, alter). Mit:
guterFreund = new friends("Nepomuk", "Schnibbeldick", "103");
erzeugst du eine Instanz dieses Objekts. Genauso wie du mit:
Bild = new Image()
eine Instanz eines Objekts erzeugst. Der Unterschied ist nur, dass das Image-Objekt in JavaScript bereits vordefiniert ist, waehrend du dir das friends-Objekt mit dem seltsamen Konstrukt selber definiert hast.
Nennt mich von mir aus einen Theoretiker, aber hier muss ich auf den Begrifflichkeiten rumreiten: Wenn wir uns schon am Klassen-vs.-Instanzen-Modell festhalten, dann muessen wir eben zwischen Klasse einerseits und Instanz andererseits unterscheiden. Der Begriff Objekt steht aber nicht stellvertretend fuer Klasse, sondern fuer Instanz, zumindest ueberall, wo ich es bisher gelesen habe (ein klare Definition habe ich dazu noch nicht gefunden).
<WARNING WHAT_OF="This part is very confusing. You migth want to skip it.">
Man findet in der JS-Welt oft Begriffe wie das "Image-Objekt". Hier muesste man unterscheiden (muesste, weil das JS-Modell nun eben nicht klassenbasiert ist). Den Satz "Bild ist ein Image-Objekt" muesste man interpretieren als "Bild ist ein Objekt (== Instanz) der Klasse Image". "IE kennt das Image-Objekt erst seit Version 4" ist aber schlichtweg falsch, denn genaugenommen kennt er die "Image-Klasse" seitdem.
Aber: JS ist wie gesagt prototypen-basierend, d.h. es macht die Unterscheidung Klasse-Instanz gar nicht. Es gibt hier lediglich eine "Constructor"-Funktion, die ein Objekt mit einem initial set of properties (anfaengliche Menge von Eigenschaften) zusammenbaut. Alles was diese Funktion (friends und Image in obigen Beispielen) zusammenbaut, sind dann einfach Objekte (guterFreund und Bild). Diese Objekte sind sozusagen nach einem Prototyp gebaut worden, koennen sich danach aber veraendern. (Das geht bei Instanzen von Klassen nicht.)
(But that's by far not the whole story. Find that at http://developer.netscape.com/docs/manuals/js/client/jsguide/obj2.htm.)
</WARNING>
Gibt es irgendwo eine Liste, was hinter new an Vorgefertigtem alles kommen kann.
Etwas umfassender als Selfhtml ist das Original, die Netscape JS Referenz: http://developer.netscape.com/docs/manuals/js/client/jsref/index.htm (1. Kapitel mit dem Pfeil aufklappen). Microsoft-spezifische Dinge stehen dort aber natuerlich nicht drin.
Im übrigen wäre ich auch für eine Aufnahme in die Forumsauslese, aber vielleicht so, daß auch sone wie ich das mal raffen.
Dort aufgenommen wird das sowieso, weil ich zur Zeit fuer die Abteilung JS-Theorie zustaendig bin. *g* Du koenntest ja mal einen Ansatz posten, wie es fuer Dich verstaendlicher waere. Woher soll denn das so ein viel mehr in seinem Cyberspace lebender Programmierer auch wissen, ne? ;-)
Und Uschi: Was soll das heissen, es liesst sich wie die Bildzeitung? *verwirrtsei*
So long