tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
437
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    dadom110 dadom110 ist offline Mitglied Brokat
    Registriert seit
    Nov 2005
    Beiträge
    252
    Hallo Zusammen,

    ich versuche mir gerade ein wenig an einem kleinen Javascript Programm und habe an einer Stelle ein kleines Problem. Ich habe das ganze mal auf ein kleines Beispiel zusammen gedampft:

    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    <script type="text/javascript">
     
     
    function OneClass(globalAtt){
        this.g=globalAtt;
        var self=this;
        document.getElementById("sub").onclick=self.aaaa;
    }
     
    OneClass.prototype.aaaa=function(){
        alert("Da: " + this.g);
    }
    </script>
    </head>
    <body>
    Get SOme
    <input type="submit" id="sub">
    <script type="text/javascript">
    cls=new OneClass("GGGGG");
    cls.aaaa();
    </script>
    </body>
    </html>

    Was haben wir da? Ich hab eine Klasse, die eine Variable hat und eine Methode definiert. Jetzt kann ich nach der Erzeugung die Methode Problemlos korrekt aufrufen (im HTML Teil unten). wenn ich das ganze aber innerhalb des Konstruktors als Event definiere, wird die Methode zwar korrekt aufgerufen aber er hat scheinbar keinen Zugriff auf die Klassenvariable (weder mit dem Konstrukt mit "self" noch über eine Event-Zuweisung mit this.aaaa .

    Frage: Warum Weshalb und wie gehts


    Code javascript:
    1
    2
    3
    4
    5
    
    function OneClass(globalAtt){
        this.g=globalAtt;
        var self=this;
        document.getElementById("sub").onclick=function(){self.aaaa();};
    }

    Ich nehme an die self / this Referenz kommt bei EventZuweisungen mit ihrem Gültigkeitsbereich nicht klar. Wenn das noch jemand etwas fachlich fundierter begründen kann, damit ich auch weiss warum ich es so mache, kann ich hier abschließen .

    Grüße
    Dom
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    das, was dein unteres Beispiel funktionieren lässt, nennt man Closure.

    Das Obere Beispiel ist ja identisch mit folgener Schreibweise:
    Code :
    1
    2
    3
    4
    5
    
    function OneClass(globalAtt){
        this.g=globalAtt;
        var self=this;
        document.getElementById("sub").onclick=function(){alert("Da: " +[B] this[/B].g);};
    }
    ...und dort liegt der Hase im Pfeffer, denn bei einer Eventüberwachung liefert this das den Event auslösende Element.
     

Ähnliche Themen

  1. Variablen Gültigkeit
    Von 5Rad im Forum .NET Application und Service Design
    Antworten: 4
    Letzter Beitrag: 02.04.11, 23:32
  2. Gültigkeit von Variablen ......
    Von Speedkill im Forum .NET Café
    Antworten: 6
    Letzter Beitrag: 11.07.06, 08:50
  3. Gültigkeit von Variablen
    Von fr3akone im Forum PHP
    Antworten: 3
    Letzter Beitrag: 08.05.05, 06:41
  4. Import / Gültigkeit von Klassen
    Von Budman im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 01.01.05, 16:50
  5. Gültigkeit von Klassen
    Von buschke im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 06.10.04, 20:41