Hauptmenü

Untermenü

OOP mit JavaScript - Anonyme Funktionen

1. Vorwort

Einen ersten Einstieg zu dem Thema habe ich euch ja hier schon gezeigt. Kommen wir nun zu den Besonderheiten und Varianten. Ach ja, auf die Sache mit den Event-Handlern bin ich hier schon eingegangen, darum überspringe ich das. Bis auf einen Hinweis, der sehr wichtig ist.

Eine Besonderheit

... stellen bei Event-Handlern die Schleifen da. Denn die werden durchlaufen, bevor man auf ein Element klickt. Und das wirkt sehr irritierend. Eine genauere Beschreibung des Problems inklusive Lösung findet ihr in diesem Praxistutorial.

2. In vorgegebenen Methoden

Hier ist besonders eine Variante interessant, die mich früher immer in den Wahnsinn getrieben hat. Und zwar die Methoden setTimeout und setIntervall des window-Objektes. Denn da muss man den Funktions-/Methodenaufruf in Anführungszeichen oder Hochkommata setzen. Und bei dynamischen Parametern wurde man wahnsinnig ob der Zeichenverknüpfungsproblematik. Aber mit anonymen Funktionen ist das überhaupt kein Problem mehr.


function funktion(str)
{
  alert (str);
}
window.setTimeout(
  function()
  {
    funktion('jodelblah');
  }
  , 2000
);

Wichtig

Bei setTimeout gibt es mal wieder eine dieser meiner Meinung nach völlig idiotischen Regelungen, die einen bei dieser Sprache in den Wahnsinn treiben. Da ist es doch tatsächlich ein großer Unterschied ob man mit window.setTimeout("funktion()",1000); (Stichwort Anführungszeichen) oder mit window.setTimeout(funktion(),1000); arbeitet. Bei letzterer verweist this in der aufgerufenen Methode (mal wieder) auf das window-Objekt, während es bei der ersten Variante auf das eigene Objekt zeigt. Sobald ich Zeit dazu habe, werde ich euch das genauer erläutern. Bis dahin muss der Hinweis leider erst mal genügen.

3. Selbstzünder

Will man eine anonyme Funktion automatisch auszuführen ohne sie aufzurufen, so benötigt man dafür eine spezielle Syntax. Fragt mich nicht nach dem Sinn dieser Schreibweise, der interessiert mich nicht. Hauptsache es funktioniert.


(
  function () 
  {
    alert('hy');
  }
)();

Wenn man so was in eine Konstruktorfunktion packt, so wird dieser Selbstzünder erst dann hochgehen, wenn man Erstere aufruft. Oder genauer gesagt ein Objekt daraus erzeugt.


function Konstruktor()
{
  (
    function () 
    {
      alert('hy');
    }
  )();
}
var obj = new Konstruktor;

4. Anonyme "Variablenfunktion"

Keine Ahnung, ob die Bezeichnung stimmt, aber ich bin jetzt zu faul, danach zu suchen. Man kann also anonyme Funktionen auch in Variablen abspeichern. Der Aufruf erfolgt dann über den Namen plus die normalen Klammern. Klingt ein wenig unlogisch, aber dieses Gefühl hat man bei JavaScript ja des Öfteren. Ich zumindest. Ach ja, manche bezeichnen so was als "Benannte Funktionsausdrücke". Das aber nur am Rande.


var funktion = function()
{
  alert('hallöle');
}
funktion();

Innerhalb eines Konstruktors

... gibt es nur eine Möglichkeit. Man kapselt die anonyme Funktion in einer Variablen mittels var. Dann ist sie nur innerhalb der Konstruktorfunktion zugänglich.


function Konstruktor()
{
  var funktion = function()
  {
    alert('hallöle');
  }
  funktion();
}
var obj = new Konstruktor;

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt