2009-05-10

Was mir neu war über JavaScript (bzw. was ich wieder vergessen hatte)

Beim Lesen des lesenswerten Buches "Das Beste an JavaScript" von O'Reilly und Yahoo!Press habe ich folgende Notizen zusammengestellt. Sie bieten einen guten Überblick über die Aspekte von JavaScript, die über Syntax-Fragen hinaus gehen
  • Vererbung über Prototypen (keine Klassen)
  • Prototyp-Verknüpfungen ermöglichen Vererbung. Dies kann Objekt-Initialisierungen und Speicherverbrauch reduzieren.
  • Objekte werden per Referenz übergeben und nicht als Kopie
  • Delegation über Prototyp-Ketten Object.prototype
  • Um zu verhindern, dass man (zB bei for..in) auch Funktionen in die Hand bekommt, sollte mit hasOwnProperty und typeof gefilter werden.
  • Die Funktions-Aufrufmuster bestimmen, wie der Parameter this initialisiert wird. Es gibt: Methoden-Aufrufmuster, Funktions-Aufrufmuster, Konstruktor-Aufrufmuster und Apply-Aufrufmuster.
  • Anzahl der Aufrufparameter einer Funktion wird nicht zur Laufzeit geprüft. Zu viele Parameter werden abgeschnitten, zu wenige, werden mit undefined gefüllt.
  • Muster:
    • Methode: Funktion als Eigenschaft eines Objekts. this wird an das Objekt gebunden.
    • Funktion: Funktion ist keine Eigenschaft eines Objekts. this wird an das globale Objekt gebunden (Fehler im Design der Sprache!) -> Methode kann innere Funktion nicht nutzen. Workaround: Methode definiert Variable that und weist ihr den Wert von this zu.
    • Konstruktor: (in Variablen mit Großbuchstaben) Funktionsaufruf mit new erzeugt ein neues Objekt und bindet this an das neue Objekt. (Konstruktoren NIE ohne new aufrufen!)
    • Apply: Wert von this wählbar, Array von Argumenten.
  • Eine funktion gibt immer einen Wert zurück. Ohne return-Wert wird undefined zurückgegeben.
  • Einer throw-Anweisung wird ein exception-Objekt übergeben, welches mindestens eine name- und eine message-Eigenschaft besitzt.
  • Hinzufügen einer Methode zu Object.prototype, macht diese für alle Objekte verfügbar (auch wenn diese schon erzeugt wurden).
  • Tail Recursion wird von JavaScript momentan nicht unterstützt.
  • Variablen besitzten keinen Block- sondern einen Funktions-Geltungsbereich. -> Variablen zu Beginn der Funktion deklarieren und nicht erst vor der Verwendung (am besten alle nach EINEM var). -> Zugriff auf Variablen außerhalb der Funktion möglich (außer this und arguments).
  • Kombination von Closures und Funktionen heißen Module. (Javascript Best Practices Folie 30). Dies ist der Begriff für die Technik, um so etwas wie Namespaces für Variablen abbilden zu können. Bei Closures wird einem Objekt keine Funktion zugewiesen, sondern das Ergebnis des Aufrufs dieser Funktion.
  • Callbacks damit der Client nicht steht, bis das Ergebnis kommt.
  • Kaskaden verwenden, indem eine Methode this zurückliefert.
  • Curry
  • Memoization: Bereits in Methoden berechnete Werte "merken". Diese Werte können in ein in einem Closure versteckten Array gespeichert werden.
Darüber hinaus gibt es:
  • Array-Methoden
  • Function-Methoden
  • Number-Methoden
  • Object-Methoden
  • RegEx-Methoden
  • String-Methoden
Da Funktionen Werte sind, zum Verständnis immer besser: var foo = function foo() {};


So, das reicht erst mal. Wenn ich das nächste Mal an JavaScript sitze, werde ich bestimmt wieder etwas hinzufügen können.

1 Kommentar:

Unknown hat gesagt…

Heute dazugelernt:
“Undefined is null or not an object” -> Das ist die JavaScript-Fehlermeldung für eine NullPointerException.