d3nn1s: Funktion in Funktion aufrufen

Hallo zusammen,
ich hab eine Frage, die wahrscheinlich für Profis relativ einfach zu beantworten ist.
Ich nutze in Javascript eine Funktion, die wie folgt aufgebaut ist:

  
function meineFunktion()  
{  
 var variable = new eigentlicheFunktion();  
}  

Nun ist die Funktion "eigentlicheFunktion()" folgendermaßen aufgebaut:

  
function eigentlicheFunktion()  
{  
 var funktionsVar = this;  
 ...  
 ...  
 this.tueWas = function()  
 {  
  ...  
 };  
}  

Ich habe also in meiner Funktion "eigentlicheFunktion()" wiederum "Unterfunktionen" (tueWas). Kann ich diese außerhalb der Funktion "eigentlicheFunktion()" irgendwie ansprechen? Also ich meine, ich möchte beispielsweise außerhalb die Unterfunktion "tueWas()" ansprechen. Geht das oder muss ich diese auslagern, um diese ansprechen zu können?

Sorry für die vielen "Funktion"s ;-) und vielen Dank für Eure Hilfe bereits im Voraus. Ihr dürft mich auch gerne belehren, auch was die Begrifflichkeiten angeht. :-)

Gruss
Dennis

  1. function meineFunktion() {

    var variable = new eigentlicheFunktion();
    }

      
    Das ist im Prinzip kein Funktionsaufruf, sondern der Aufruf eines Objekt-Konstruktors. Was heisst das? Ein Merkmal objektorientierter Funktionen, ist es, neue Objekte eines Typs zu erzeugen. Oftmals wird dazu eine K´sogenannte Konstruktorfunktion implizit aufgerufen, die die Werte des Objektes anlegt und initialisiert. In Javascript ist das (vereinfacht) so gelöst: Das Schlüsselwort „new“ erzeugt ein neues, leeres Objekt. Die Konstruktorfunktion kann dann dieses Objekt mit Werten und Methoden befüllen.  
      
      
    
    > ~~~javascript
    
    function eigentlicheFunktion() {  
    
    >     var funktionsVar = this;  
    >     ...  
    >     this.tueWas = function() {  
    >         ...  
    >     };  
    > }
    
    

    Du siehst hier das Schlüsselwort „this“. Das zeigt in diesem Kontext auf das leere Objekt, das die Konstruktorfunktion befüllen kann. Und hier definiert diese Funktion eine anonyme Funktion und weist diese anonyme Funktion der Eigenschaft „tueWas“ zu.

    Ok, das klingt kompliziert. Vielleicht so:

    1. new erzeugt ein neues leeres Objekt, ich nenne es mal obj.
    2. Die Konstruktorfunktion wird aufgerufen und kann obj unter dem Stichwort this bearbeiten.
    3. In der Konstruktorfunktion wird eine anonyme Funktion definiert, diese wird obj zugewiesen.
    4. Das Ergebnis des Ausdrucks „new Konstruktor()“ ist dann dieses, nun nicht mehr leere Objekt. Es wird sozusagen zurückgegeben, auch wenn das so nicht ausgeschrieben ist. Das heisst, Deine Variable namens variable zeigt jetzt auf dieses Objekt.

    Die „Unterfunktion“ tueWas ist also eine Methode des Objektes und damit (relativ) fest an das Objekt gebunden. Methoden von Objekten ruft man so auf: „obj.methode()“. Wenn Du noch mitgekommen bist, dann merkst Du, dass Du in Deiner ersten Funktion also die Methode mit „variable.tueWas()“ aufrufen kannst.

    Im deutschen Sprachraum sind Tutorials zu den objektorientierten Programmiermustern in Javascript leider etwas Mangelware.

    • SELFHTML hat die Seite Objekte, Eigenschaften und Methoden, aber die ist eher ein Überblick denn eine Einführung.
    • Es gibt ein, zwei empfehlenswerte Artikel unter SELF-Aktuell, aber die kann ich gerade nicht recherchieren, weil ... nicht erreichbar. Such nach den Namen molily und Christian Kruse.
    • Molily arbeitet ab und an an seiner eigenen Javascript-Einführung, aber die ist in dem Teil noch mau. Aber vielleicht lohnt sich Querlesen.

    • Wenn Du vor englisch nicht zurück schreckst, kann ich nur das Kapitel zu Objektorientierer Programmierung in dem für Anfänger recht geeigneten Buch Eloquent Javascript empfehlen.

    1. Vielen Dank für Eure Hilfe.
      Das hat mir sehr geholfen!

      Viele Grüße
      Dennis

  2. function meineFunktion()
    {
    var variable = new eigentlicheFunktion();
    }

    
    >   
    > Nun ist die Funktion "eigentlicheFunktion()" folgendermaßen aufgebaut:  
    > ~~~javascript
      
    
    > function eigentlicheFunktion()  
    > {  
    >  var funktionsVar = this;  
    >  ...  
    >  ...  
    >  this.tueWas = function()  
    >  {  
    >   ...  
    >  };  
    > }  
    > 
    
    

    Du erzeugst mit dem Konstruktor »eigentlicheFunktion« ein Objekt. Im Konstruktor erzeugst du am jeweiligen Instanzobjekt eine Methode namens »tueWas«.

    Wenn du den Konstruktor mit »new« aufrufst, bekommst du ein Instanzobjekt zurück. Dieses speicherst du in »variable«. Daran kannst du die Methode aufrufen:

    variable.tueWas();

    Das geht natürlich nur dort, wo »variable« auch verfügbar ist. Das ist in deinem Beispiel innerhalb von »meineFunktion«.

    Siehe auch:
    Organisation von JavaScripten: Konstruktoren, Prototypen und Instanzen

    Ich habe also in meiner Funktion "eigentlicheFunktion()" wiederum "Unterfunktionen" (tueWas).

    Wenn du ein Objekt erzeugst und daran eine Eigenschaft hängst, die ein Funktionsobjekt beinhaltet, so nennt man dies Methode.

    Mathias