molily: mal was Philosophisches - Funktion oder Methode

Beitrag lesen

Hallo,

Ich hatte ein Javascript, was ohne jede Fehlermeldung einfach nicht lief. Ursache war, dass ich versucht habe, die Länge eines Arrays mit length(arrayvariable) zu bestimmen (Es war schon spät).

#1# warum erhalte ich in dem Fall keine Fehlermeldung wie "Funktion length nicht definiert"?

length ist ein Bezeichner (Identifier), welcher anhand der Scope-Chain aufgelöst wird (siehe auch Identifier Resolution).

An oberster Stelle in der Scope-Chain steht das globale Objekt window. Wenn in keinem der relevanten Funktions-Scopes eine lokale Variable namens length gefunden wurde, so wird eine entsprechende globale Variable (Eigenschaft des window-Objektes) gesucht. Und siehe da, window hat eine Eigenschaft length, die anscheinend dasselbe wiedergibt wie http://de.selfhtml.org/javascript/objekte/frames.htm#length@title=window.frames.length.

length ist vom Typ Number. Wenn du den Call-Operator () auf einen Number-Wert anwendest, so bekommst du eine TypeError-Exception, weil du versuchst hast, eine Nicht-Funktion aufzurufen – was natürlich nicht geht.

Einen Fehler solltest du also auf jeden Fall bekommen haben. In der Firefox-Fehlerkonsole wird diese Exception mit »length is not a function« wiedergegeben. Was willst du mehr? ;)

#2# Es gibt ja durchaus auch Programmiersprachen, in welchen die Größe eines Arrays mit einer Funktion ermittelt wird. Welche Vor- und Nachteile hat

sizeof($arrayvariable) vs. arrayvariable.length?

Das ist wie gesagt ein unterschiedliches Sprachdesign. JavaScript ist objekt-orientiert, also fragt man das Array-Objekt selbst, wieviel Einträge es hat, anstatt eine externe Funktion oder einen Operator darauf anzuwenden.

Mathias