Matthias Apsel: mal was Philosophisches - Funktion oder Methode

Om nah hoo pez nyeetz, alle!

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"?

#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?

Matthias

--
1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
  1. sizeof($arrayvariable) vs. arrayvariable.length?

    So aus dem Bauch raus, würde ich sagen, das erste ist nicht Objektorientiert. Also der Array ist ein reiner Datenspeicher und kein Object, dass Methoden anbietet. Der zweite Ansatz ist ein Objektorientierter, der Array ist mehr als nur stumpfer Speicher, es ist ein Objekt, was bestimmte Operationen an sich zulässt.
    Was Vor- und Nachteile von OO und nicht OO sind kannst du mal im Netz suchen (falls du das nicht schon weißt).

    Grüße!

    1. [latex]Mae  govannen![/latex]

      Was Vor- und Nachteile von OO und nicht OO sind kannst du mal im Netz suchen (falls du das nicht schon weißt).

      Im Kontext „Frau“: „Man weiß, was man bekommt“ vs. „laß dich überraschen“

      scnr

      Stur lächeln und winken, Männer!
      Kai

      --
      Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
      in Richtung "Mess up the Web".(suit)
      SelfHTML-Forum-Stylesheet
  2. 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

    1. Om nah hoo pez nyeetz, molily!

      Vielen Dank für die ausführliche Antwort.

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

      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? ;)

      Gestern war die Fehlerkonsole leer, sonst hätte ich ja den Fehler gleich bemerkt. :-(

      Matthias

      --
      1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif