Frank: Klassen auf einem Poster?

Hallo,
gibt es irgendwo eine Übersicht für die JavaScript Klassen auf einem Poster?

...Hierarchie, wer stammt von wem ab usw.

Grüße!
 Frank

  1. 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:)

  2. 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:)