Klassen auf einem Poster?
Frank
- javascript
Hallo,
gibt es irgendwo eine Übersicht für die JavaScript Klassen auf einem Poster?
...Hierarchie, wer stammt von wem ab usw.
Grüße!
Frank
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:
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:
weiterhin:
bzw.:
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":
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
|
|
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:)
hallo again Frank,
nimm diesen hier:
http://javascript.visibone.com
viel spass - peterS. - pseliger@gmx.net
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)