Faber: Zugriff auf Variable in onLoad-Funktion

Hallo zusammen!

Ich bräuchte mal bei Folgendem Hilfe: Ich muss ein Variable (gauge1) in einer window.onload-Funktion deklarieren und später wieder auf eine Methode von gauge1 (gauge1.setValue() ) zugreifen, also so in der Art:

window.onload = function () {  
var gauge1 = new Gauge();  
}  
  
gauge1.setValue();  

Aber ich komme nicht dahinter, wie ich das anstellen kann.

Deshalb die Frage an die Fachkundigen: Ist das überhaupt möglich und wenn ja, wie?

Viele Grüße

Faber

  1. Hi,

    Ich muss ein Variable (gauge1) in einer window.onload-Funktion deklarieren und später wieder auf eine Methode von gauge1 (gauge1.setValue() ) zugreifen

    dann muss diese Variable (dieses Objekt) also entweder global sein, oder eine Eigenschaft eines anderen geeigneten Eltern-Objekts.

    [code lang=javascript]window.onload = function () {
    var gauge1 = new Gauge();
    }

    Damit wird gauge1 aber lokal innerhalb der namenlosen Funktion erzeugt und nach dem Beenden der Funktion wieder entsorgt. Wenn du das Schlüsselwort var weglässt, wird gauge1 global, bleibt also bestehen und ist von überall aus zugänglich.

    Ciao,
     Martin

    --
    Lieber arm dran als Arm ab.
    1. [latex]Mae  govannen![/latex]

      window.onload = function () {

      var gauge1 = new Gauge();
      }

      Damit wird gauge1 aber lokal innerhalb der namenlosen Funktion erzeugt und nach dem Beenden der Funktion wieder entsorgt. Wenn du das Schlüsselwort var weglässt, wird gauge1 global, bleibt also bestehen und ist von überall aus zugänglich.

      .. was aber ausgesprochen schlechter Stil ist. Es „verschmutzt“ das window-object (Schleifen über Eigenschaften dieses Objekts brauchen z.B. entsprechend länger) und sorgt potentiell für Probleme durch Namenskollisionen mit existierenden oder irgendwann neu hinzukommenden Funktions-/Eigenschaftsnamen, die z.T. einfach überschieben werden.

      Besser wäre es, die Variable außerhalb der onload-Funktion zu initialisieren und dann z.B. den gesamten Code in eine anonyme, selbst-ausführende Funktion einzuschließen:

      [code lang=javascript](function () {
         var gauge1;

      window.onload = function () {
            gauge1 = new Gauge();
         };

      function ichwerdenach20sekundenaufgerufen() {
            window.alert(typeof gauge1);
         };

      window.setTimeout(ichwerdenach20sekundenaufgerufen, 20000);
      })();

        
      Oder man definiert sich für das gesamte JS ein Objekt, das sozusagen als „Namespace“ dient:  
        
      ~~~javascript
      var Ohrwurm = {};  
        
      window.onload = function () {  
        Ohrwurm.gauge1 = new Gauge();  
      };  
        
      // Diese Funktion wird irgendwann ausgeführt und kennt  
      Ohrwurm.blablubb = function() {  
         alert(typeof Ohrwurm.gauge1);  
      };
      

      Cü,

      Kai

      --
      Even if you are a master of jQuery, you can only create mediocre (at best)
      scripts. The problem is that the authors you rely on have not mastered the
      DOM themselves. It's like one blind guy leading another off a cliff (D.Mark/clj)
      Foren-Stylesheet Site Selfzeug JS-Lookup
      SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
      1. Oder man definiert sich für das gesamte JS ein Objekt, das sozusagen als „Namespace“ dient:

        var Ohrwurm = {};

        window.onload = function () {
          Ohrwurm.gauge1 = new Gauge();
        };

        // Diese Funktion wird irgendwann ausgeführt und kennt
        Ohrwurm.blablubb = function() {
           alert(typeof Ohrwurm.gauge1);
        };

          
        Super, das sieht nach einer Lösung aus, die ich in meiner Anwendung gut nutzen könnte. Ich wollte so einen "Namespace" zwar bisher vermeiden, aber jetzt überwiegen doch die Vorteile. Das werde ich mal ausprobieren.  
          
        Nur noch eine Fragen: Was verbirgt sich hinter dem Konstrukt  
        `var Ohrwurm = {};`{:.language-javascript}  
          
        Ist Ohrwurm dann ein anonymes Objekt ohne Eigenschaften und Methoden?  Was erzeugt die Syntax mit den geschweiften Klammern?  
          
        Vielen Dank schon mal  
          
        Faber
        
        1. Nur noch eine Fragen: Was verbirgt sich hinter dem Konstrukt
          var Ohrwurm = {};

          http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#object-literale

          Struppi.

          1. http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#object-literale

            Struppi.

            aaah vielen Danke, jetzt verstehe ich auch den Code von RaphaelJS besser.

        2. Hi,

          Nur noch eine Fragen: Was verbirgt sich hinter dem Konstrukt
          var Ohrwurm = {};

          Ist Ohrwurm dann ein anonymes Objekt ohne Eigenschaften und Methoden?

          nein, kein anonymes, denn es hat ja einen Namen (nämlich "Ohrwurm"). Aber eins ohne Eigenschaften und Methoden außer denen von Object. Die Schreibweise ist somit gleichwertig mit new Object().

          Was erzeugt die Syntax mit den geschweiften Klammern?

          Ein "leeres" Basisobjekt.

          Ciao,
           Martin

          --
          Küssen ist die schönste Methode, eine Frau zum Schweigen zu bringen.