Zugriff auf Variable in onLoad-Funktion
Faber
- javascript
0 Der Martin0 Kai3450 Faber0 Struppi0 Faber
0 Der Martin
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
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
[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
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
Nur noch eine Fragen: Was verbirgt sich hinter dem Konstrukt
var Ohrwurm = {};
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#object-literale
Struppi.
http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#object-literale
Struppi.
aaah vielen Danke, jetzt verstehe ich auch den Code von RaphaelJS besser.
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