Rolf B: Variablen im globalen Namensraum

Beitrag lesen

Hallo Toni,

das Modulkonzept ist im Normalfall die sinnvollste Lösung.

Aber schon mal braucht man tatsächlich was Globales, und dann hilft ein einziges globales Objekt weiter. Darin legt man die "Variablen", die man braucht, als Propertys an. Zusammen mit dem Block-Konstrukt kann man noch ein paar private Helper hinzufügen.

<script>
{
   let zähler = 0;    // let: nur im Block sichtbar (IE ab Version 11)
   Toni = {           // ohne var/let: globalgalaktisch
      stolzeVariable: 1,
      eitleVariable: 42,
      heulsuse: 99,
      getNextValue: function() { return ++zähler; };
      nochEinWert: () => ++zähler;
      get neuerWert() { return ++zähler; }
   };
}

let a = Toni.getNextValue(); // 1
let b = Toni.nochEinWert();  // 2
let c = Toni.neuerWert;      // 3
</script>

Hier siehst Du auch drei Möglichkeiten, Funktionen an ein Objekt zu binden (also Methoden).

  • Als function - die klassische Art, klappte schon 2005 oder früher
  • Als Arrow-Funktion - nicht im Internet Explorer
  • als Property-Getter - klappt in Chrome, Fuchs und sogar im Internet Explorer ab Version 9

Wenn Du den Internet Explorer vor Version 11 unterstützen musst/willst, ist das Blockkonzept aber untauglich. Module gibt's dann auch nicht. Aber IIFE - immediately executed function expression. Siehe Self-Wiki.

Rolf

--
sumpsi - posui - obstruxi