====== OOP as seen by Edgemonkey ====== Javascript hat eine etwas andere Auffassung von von Objekten als die Meisten anderen Sprachen. Es folgt dabei eher den Expressions von Scheme als dem Namensgebenden Java oder dem Syntaxgebenden C: "Everything is an Object()". Das führt zu einigen interessanten Effekten, die hier aber nicht diskutiert werden sollen. Stattdessen (für neu und alt-Entwickler und "interessierte Nutzer") hier eine Zusammenfassung der Logik hinter dem Affen (beziehungsweise seinem Code). ===== Global Context ===== Der Edgemonkey verpestet nicht den globalen Kontext von Javascript sinnlos: alle Objekte werden als Eigenschaften des in ''window'' injezierten Objektes ''EM'' angelegt. ===== Prototypen ===== Klassennamen werden nach Konvention in CamelCase mit Großbuchstaben am Anfang geschrieben. Ausnahme: ''PNAPI'' (Abkürzung!) Dabei wird Konstruktor und assoziierter Prototyp nacheinander geschrieben (keine Class-Creation-Funktion). Klassen, die nur in speziellem Kontext benötigt werden, sind unter diesem zu finden: ''PNAPI.PNBox'', da diese nur von ''PNAPI'' erstellt werden. Funktionsnamen der Objekte kennen 3 Schreibweisen: * ''ev_*'': Eventhandler für DOM-Elemente * ''CamelCase'': extern aufgerufene Funktionen, besonders Module in ''EM.Pagehacks'' * ''camelCase'': reguläre Funktionen ===== Sortierung ===== Grundsätzlich sind die generellen Erweiterungen wie Hilfsfunktionen für XPath oder Erweiterungen an String, Array etc. vorn angesiedelt. Normale Edgemonkey-Klassen haben jedoch keine besondere Reihenfolge, sind aber weitestgehend nach Themenkomplex konsistent. ===== Sprachfeatures ===== Weitestgehend werden Features von JavaScript 1.8 genutzt, besonders die Mozilla-Erweiterungen zu Array und String. Wo möglich, wird mit forEach, Closures und Method Chaining gearbeitet, um den Code kurz und leicht verständlich zu halten. Global ausgeführter Code findet sich am Dateiende.