felix12: klassenlose vollwertige und flexible oo auf funktionaler basis

Beitrag lesen

Hallo Peter!

... die eigentliche Haupt-Klasse (in seinem beispiel cnstr) ... ««

[cnstr] ist eine konstruktor-funktion. JavaScript ist klassenlos!

Ja, für mich steht ein Konstruktor als synonym für eine klasse. Wie könnte ich sonst Konkrete Objekte (per "new") erzeugen ohne eine art "Klasse". :)

... Nur die Wrapper Klasse wird instanziert! :) ... ««

nein - die einzige stelle, an der im beispiel ueberhaupt irgendwas
instanziiert wird, sieht so aus: var obj = new SomeConstructor();

das anonyme, den konstruktor umschliessende funktionsobjekt (der wrapper)
wird in einem ritt initialisiert und aufgerufen. der rueckgabewert dieser
funktion ist ein weiteres funktionsobjekt - der konstruktor, welcher dann
schlussendlich auf [SomeConstructor] abgebildet wird.

hmm ja da habe ich "aufrufen" mit "instanzieren" rein namentlich verwechselt. :) Das kam weil ich die Bedeutung des Call-Operators mit der call()-methode verwechselt hatte, welche ja ein neues objekt "konstruiert", wobei der operator nur "aufruft". Das war aber nicht so von mir gemeint... uups :)

die lokalen variablen einer funktion sind von ausserhalb dieses sie
einschliessenden adressraumes nicht adressierbar. werden  funktionen
nur geschickt genug verschachtelt, koennen sich deren lokale variablen,
obwohl von aussen immer noch nicht zugaenglich, trotzdem durch die
adressraeume hindurch referenzieren. und ... solange referenzen von
noch *lebenden* objekten in eine eigentlich schon abgearbeitete
funktion hinein bestehen, wird diese nicht von der automatischen
speicherbereinigung (garbage collection) erfasst.

Also kann man durch kaskadieren von funktionen verschiedene Sichtbarkeitsbenen von variablen erzeugen, die sich durch referenzieren zum teil umgehen lassen...

die ueber [[Function]] referenzierten methoden [apply] und [call]
ermoeglichen es einem objekt, die methoden eines anderen objekts zu
*borgen* und im eigenen kontext auszufuehren, ohne diese methoden
selbst besitzen zu muessen.

angenommen ich arbeite mit call, und ich überschreibe eine Funktion der "Klasse" die ich über call konstruiere, wie kann ich dann noch auf sie zugreifen? zb:

function SuperCat() {
  this.sound = "miaow";
}

function SubCat() {
  SuperCat.call(this);
  var instance = this;
  this.sound ="overridden miaow";

this.makesound = function() {
    alert("the cat says" + instance.sound);
  }
}

var felixcat = new SubCat();
felixcat.makesound();

wie rufe ich den member "sound" von der mit call erzeugten instanz der "Klasse" SuperCat auf? Ich meine wie referenziere ich diesen? geht das überhaupt?

in JavaScript waere man deshalb geradezu dazu verpflichtet,
objektkomposition auf basis wohldefinierter schnittstellen
als nativen - weil durch das sprachkonzept vorgegebenen -
vererbungsmechanismus direkt einzusetzen, statt zu versuchen,
klassenvererbung auf den gerade genannten grundlagen zu emulieren.

Naja damit muss ich mich noch anfreunden...

Danke für deine Mühe Peter!

Schöne Grüße
Felix

0 45

Interne public static member nicht aufrufbar

felix12
  • javascript
  1. 0
    Cheatah
    1. 0
      felix12
      1. 0
        Cheatah
        1. 0
          felix12
          1. 0
            MudGuard
            1. 0
              felix12
              1. 0
                Struppi
                1. 0
                  Patrick Andrieu
                  1. 1
                    peterS.
                    1. 0
                      Patrick Andrieu
                    2. 0
                      felix12
                2. 1

                  *private static* durch umschliessende anonyme *function stacks*

                  peterS.
                  1. 0
                    felix12
                    1. 0
                      Struppi
                      1. 0
                        felix12
                        1. 2

                          klassenlose vollwertige und flexible oo auf funktionaler basis

                          peterS.
                          1. 0
                            felix12
                            1. 0
                              felix 12
                            2. 0
                              Struppi
                              1. 0
                                felix12
                            3. 1

                              vererbung / delegationsprinzipien

                              peterS.
                              1. 0
                                felixcat
                                1. 1

                                  »[Function].arguments.callee« versus »arguments.callee«

                                  peterS.
                                  1. 0
                                    felix12
      2. 0
        Kai345
        1. 0
          felix12
          1. 0
            ChrisB
            1. 0
              felix12
              1. 0
                Struppi
                1. 0
                  felix12
                  1. 0
                    Struppi
                    1. 0
                      felix12
                      1. 0
                        Struppi
                      2. 1

                        einfache objekte/namensraeume und singleton-konstrukte

                        peterS.
                        1. 0
                          Struppi
              2. 2
                Timo "God's Boss" Reitz
                1. 0
                  felix12
                  1. 0
                    Kai345
                    1. 0
                      felix12
                      1. 0
                        Kai345
                        1. 0
                          Kai345
                          1. 0
                            felix12
                            1. 0
                              Kai345
  2. 4
    molily