hallo Antje,
:-) wem sagst du das. Ich kämpfe mich gerade durch dieses Dokument um die Objektorientiertheit von JavaScript exakt zu erfassen und mit einfachen Worten zu beschreiben und insbesondere eine gescheite Hierarchie abzubilden.
meine bisherigen erfahrungen wuerde ich so zusammenfassen:
-
in Javascript ist alles "Object" (, da sich alles auf "das globale Objekt" herunterbrechen laesst);
-
objekte wiederum sind traeger von datentypen - der datentyp eines objekts laesst sich mit dem operator "typeof" ermitteln und kann zur zeit folgendermassen lauten:
- "object"
- fuer "Object" -konstruktor: new Object(); -funktion : Object(); -literal : {property1:value1,property2:value2,..,propertyN:valueN}; - fuer "Array" -konstruktor: new Array(value1,value2,..,valueN); -literal : [value1,value2,..,valueN]; (MSIE)- fuer "RegExp" -konstruktor: new RegExp("[rule]","[flag]"); -literal : /[rule]/[flag]; - fuer "Date" -konstruktor: new Date(); -funktion : Date(); bsp.:
alert("bsp.\t: new Object()\n\ntype\t: "" + typeof(new Object()) + ""\n\n\nconstructor:\n" + new Object().constructor.toString()); alert("bsp.\t: [1,2,3]\n\ntype\t: "" + (typeof [1,2,3]) + ""\n\n\nconstructor:\n" + [1,2,3].constructor.toString()); alert("bsp.\t: /\s/\n\ntype\t: "" + typeof(/\s/) + ""\n\n\nconstructor:\n" + /\s/.constructor.toString()); alert("bsp.\t: new Date()\n\ntype\t: "" + typeof(new Date()) + ""\n\n\nconstructor:\n" + new Date().constructor.toString());
- "function"
- fuer "Function"-konstruktor: xyz = new Function("[argument1]","[argument2]",..,"[argumentN]","[body]"); -literal : xyz = function("[argument1]","[argument2]",..,"[argumentN]","[body]"); -definition : function xyz("[argument1]","[argument2]",..,"[argumentN]","[body]"); [
(gecko)- fuer "RegExp" -konstruktor: new RegExp("[rule]","[flag]"); -literal : /[rule]/[flag];
// was ich nicht fuer eine so gute idee halte; ]
bsp.:
alert("bsp.\t: new Function("",";")\n\ntype\t: "" + typeof(new Function("",";")) + ""\n\n\nconstructor:\n" + new Function("",";").constructor.toString()); alert("bsp.\t: /\s/\n\ntype\t: "" + typeof(/\s/) + ""\n\n\nconstructor:\n" + /\s/.constructor.toString());
- hierzu sei angemerkt, dass sich im javascript-host ("window"-object in js-faehigen browsern) referenzen auf funktionen nur dann zurueck- verfolgen lassen(der funktionsname laesst sich ermitteln, und ueber "window[funktionsname]" ist die existenz der funktion nachpruefbar), wenn diese ueber die herkoemmliche definition mit dem schluesselwort "function" eingefuehrt wurden - in selbstdefinierten objekten deren methoden auf globale funktionen verweisen ergaebe eine pruefung auf den funktionsnamen sowohl fuer die konstrukor- als auch die literal- schreibweise: "function anonymus() { [functionCode]; }";
- "string"
- fuer "String" -konstruktor: new String(); -funktion : String(); -literal : "1"; bsp.:
alert("bsp.\t: "1"\n\ntype\t: "" + (typeof "1") + ""\n\n\nconstructor:\n" + "1".constructor.toString());
- "number"
- fuer "Number" -konstruktor: new Number(); -funktion : Number(); -literal : 1;
bsp.:
alert("bsp.\t: 1\n\ntype\t: "" + typeof(1) + ""\n\n\nconstructor:\n" + (1).constructor.toString());
- "boolean"
- fuer "String" -konstruktor: new Boolean(); -funktion : Boolean(); -literal : true; bsp.:
alert("bsp.\t: true\n\ntype\t: "" + (typeof true) + ""\n\n\nconstructor:\n" + true.constructor.toString());
- "undefined"
- daraus und nach meinem bisherigen verstaendnis der sprache ergibt sich fuer mich folgende hierarchie:
Object (global) | +-------+-------+ | | (complex) (primitive) | | +-----+-----+-----+ | | | | | Math +-Array Function +-Number | +-RegExp | +-String | +-Date | +-Boolean | +-Error | | | | | | | | -kann neue | | | konstruk- | | | toren de- | | | finieren | | | | | | | | | -kein +-auf diese objekte +-diese objekte new- kann nur referen- werden bei einer ope- ziert werden; zuweisung kopiert; rator; | | | | | | +---------+---------+ -kein | proto- | typing; prototyping ist moeglich;
ich habe in den letzten wochen tief in js-code rumgewuehlt, um das prototypenkonzept von js hinsichtlich eines besseren objektorientierten programmierstils in dieser sprache auszuloten - als onlinedokumuffel und nur-besitzer-von-"JavaScript 1.2 von David Flanagan/O'REILLY" kam ich trotzdem zur erkenntnis, dass mein 2 jahre alter feature artikel http://aktuell.de.selfhtml.org/artikel/javascript/table-obj/index.htm gelinde gesagt halbverdauter quark ist (ein typischer schnellschuss eben), und etwas getan werden muss;
die ersten ergebnisse meines tuns, die auch Dich interessieren koennten, habe ich unter
http://www.pseliger.de/jsExtendedApi/_reference_jsApi_cloneAndScanObjects.html bzw. http://www.pseliger.de/jsExtendedApi/__tableConstructor.prev.030430.html
abgelegt - wobei der quellcode des zuletzt aufgefuehrten dokuments die umsetzung meines gesamten in den letzten 4 wochen zusammengetragenen wissens zu den hier angesprochenen fragen darstellt (oo, performance) und die grundlage zu einem ueberarbeiteten feature-artikel sein soll;
by(t)e by(t)e - peterS. - pseliger@gmx.net
-- sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)