JS: Verschachtelte Funktionen



  • Hallo liebe Javascript-Gemeinde,

    vorab, meine Kenntnisse zur Javascript-Syntax sind veraltet und begrenzt, aber ich kämpfe mich durch.

    Hier ein Auszug aus einem Codeblock (anonymisiert) welchen ich nicht so recht verstehe:

    var _toggle = false;
    var _proxy = new WorkProxy();
    
    function WorkProxy()
    (
        var Obj;
    
        function Check(text) { ... }
    
        this.Toggle = function () { ... }
    )
    

    Frage 1: eine Definition einer Funktion "Check()" in einer (Eltern-)Funktion sieht für mich echt seltsam aus, aber in JS geht es halt. Ich lese es so, daß das Objekt "WorkProxy" auf diese Art dynamisch um eine Funktion "Check()" erweitert wird.

    Frage 2: "this.Toggle = function" ist auch eine Funktionsdefinition? Wieso ist sie SO definiert, und nicht als Funktion in Funktion? Kommt am Ende dasselbe heraus, also sind beide Arten identisch? Warum dann so unterschiedliche Definitionen?

    Frage 3: gibt es eine Quelle (online oder gedruckt), welches sich allumfassend mit diesen neuen Techniken beschäftigt (Objekte, Klasse, Prototyping usw.)?

    Danke für alle Tips!



  • Zu 1. Das definiert lediglich eine Funktion Check(), die nur im Scope von Work() sichtbar ist. Diese Funktion ist nicht Bestandteil von Obj (Obj kommt in dem Statement nirgends vor).

    Zu 2. DAS definiert eine Funktion, die Methode des Objekts ist, welches die Funktion WorkProxy() erzeugt. Obj hat damit aber immernoch nichts zu tun. Die Variablendeklaration in der ersten Zeile von WorkProxy kann komplett entfallen.



  • Nachgefragt: Könnte man da also von einer Art private/public-Unterschied sprechen?

    MfG SideWinder



  • SideWinder schrieb:

    Nachgefragt: Könnte man da also von einer Art private/public-Unterschied sprechen?

    Jein.
    Es wird oft verwendet um soetwas wie public/private zu haben, aber prinzipiell ist es nichts anderes als Sichtbarkeitsbereiche. Die Funktion Check() ist außerhalb einfach nur unsichtbar.

    Wenn man aber ein handle auf Check hat, kann man es aufrufen.



  • zu 3)
    Es gibst Mozilla Developer Network, MDN. Die unterscheiden zwar teilweise nicht zwischen eigenen, proprietären Sachen und dem Standard, aber wenn man einfach nur eine Kurzdefinition einer Funktion braucht, ist das am besten geeignet.



  • Hier findest du eine gute Zusammenfassung von speziellen JS-Konstrukten. http://www.codeproject.com/Articles/248450/JavaScript-Jargon



  • Ups, ganz schön spät, dennoch vielen Dank an alle für Eure Antworten! 😃