gruss Frank,
gibt es irgendwo eine Übersicht für die JavaScript Klassen auf einem Poster?
das weiss ich nicht;
... Übersicht für die JavaScript Klassen ...
------------------------------------^^^^^^^
...Hierarchie, wer stammt von wem ab usw.
ein klassenkonzept ist in javascript bis zur version 1.5 unbekannt;
der sprachumfang "kennt" in dem von Dir gewuenschten sinne nur
objekte/konstruktoren sowie das prototypen-konzept;
native js-objekte sind:
- das "Object"-objekt, auf das jedes andere js-objekte zurueckgefuehrt
werden kann und von dem alle js-objekte prototypisch "erben" (dazu
spaeter mehr), - das "Array"-objekt, welches man durchaus als ein speziell fuer diesen
zweck aufgebohrtes "Object"-objekt bezeichnen kann;
beide gerade genannten objekte identifizieren sich ueber den operator
"typeof" (bsp.: typeof(new Object()), typeof(new Array())) auch als
"object";
die enge beziehung zwischen "Array" und "Object" manifestiert sich im
dualismus objekt - assoziatives array:
* ein objekt (konstruktor: "Object") ist immer auch ein assoziatives
array;
* rein assoziative arrays sind immer auch objekte im sinne von "Object";
objekte, deren konstruktoren "Array" oder "Object" bzw. die vom typ
"object" sind, werden bei variablen-zuweisungen immer nur referenziert;
sowie:
- das "Function"-objekt, welches ebenfalls eine sonderrolle einnimmt,
da funktionen, die intern mit einer eigen-referenzierung ueber das
schluesselwort "this" arbeiten konstruktoren fuer selbstdefinierte
objekte sind, sobald diese funktionen mit dem operator "new" aufge-
rufen werden;
weiterhin:
- die objekte "Boolean", "Number", "String"
bzw.:
- die objekte "RegExp", "Date" und "Error";
prototypische vererbung findet in javascript ueber das object "prototype"
statt, welches eine eigenschaft eines jeden js-objektes ist, da schon das
oberste js-objekt "Object" diese eigenschaft implementiert;
um z.b.: die alle js-objekte erfassenden methoden "getConstructorName()"
bzw. "getObjectType()" zu realisieren, wird das prototype-objekt von
"Object" um die entsprechenden eigenschaften erweitert, die als funktionen
umgesetzt und zugewiesen werden;
Object.prototype.getConstructorName = function() {
var thisConstructor = this.constructor;
var thisConstructorString = thisConstructor.toString();
var regExpDefault = /^\s*function\s+([a-zA-Z0-9_(]{2,}[^)]))/;
var regExpMsie5x= /^\s*[object\s+([a-zA-Z0-9_]{1,})/;
return ((thisConstructor) ? ((regExpDefault.test(thisConstructorString)) ? (regExpDefault.exec(thisConstructorString)[1]+")") : ((regExpMsie5x.test(thisConstructorString)) ? (regExpMsie5x.exec(thisConstructorString)[1]+"()") : (null))) : (null));
};
Object.prototype.getObjectType = function() {
var thisConstructor = this.constructor;
var thisConstructorString = thisConstructor.toString();
var regExpDefault = /^\s*function\s+([a-zA-Z0-9_]{1,})/;
var regExpMsie5x = /^\s*[object\s+([a-zA-Z0-9_]{1,})/;
return((thisConstructor) ? ((regExpDefault.test(thisConstructorString)) ? (regExpDefault.exec(thisConstructorString)[1].toLowerCase()) : ((regExpMsie5x.test(thisConstructorString)) ? (regExpMsie5x.exec(thisConstructorString)[1].toLowerCase()) : ("object"))) : ("object"));
};
die zwei methoden sind nun an jedes mit den oben besprochenen konstruktoren
erzeugte objekt (auch an die selbstdefinierten) ueber die prototypen-kette
gebunden;
obwohl man nun ohne weiteres "alert((new Date()).getObjectType());" schreiben
kann, "besitzt" die prototype-eigenschaft eines "Date"-objekts diese methode
nicht direkt - der zugriff wuerde hier automatsich ueber folgende stationen
laufen:
-
[date-object].getObjectType ? false
-
[date-object].constructor ?= function Date() { ... }
-
function Date() { ... }.getObjectType ? false
-
function Date() { ... }.prototype.getObjectType ? false
-
function Date() { ... }.constructor ?= function Function() { ... } oder auch
-
function Date() { ... }.constructor ?= function Object() { ... }, denn
so genau weiss ich das jetzt nicht;
auf alle faelle landet js irgendwann bei "Object":
- function Object() { ... }.getObjectType ? false
- function Object() { ... }.prototype.getObjectType ? true
das beispielhaft gewaehlte date-objekt "borgt" sich zum zeitpunkt des
methoden-aufrufs demzufolge nur den funktions-datentyp vom obersten
objekt "Object" und wendet diesen auf sich selber an;
+------Functiom
|
|
- Object---Array
|
|
|
+------Boolean
|
+------Number
|
+------String
|
|
|
+------RegExp
|
+------Date
|
+------Error
by(t)e by(t)e - peterS. - pseliger@gmx.net
ps - gerade gesagtes entspricht meinem derzeitigen wissensstand in javascript,
was missverstaendliche ausdrucksweise meinerseits bzw.irrtuermer, denen
ich durch mangelndes verstaendnis aufgesessen bin, nicht ausschliesst -
korrekturen und gutgemeinte ratschlaege werden deshalb dankbar angenommen;
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)