Hallo,
Um der Sprache Javascript näher zu kommen, habe ich mich mit einem etwas grösseren (jedenfalls für mich) Projekt versucht. Es handelt sich um ein kleines 2-Player-Game.
Respekt, das sieht doch ganz gut aus. :)
Da ich mir die Sprache vollständig selbst beigebracht habe, könnte es sein, dass ich mir "ungeeignete Angewohnheiten angeeignet" habe. Ich wäre über jedes noch so kleine Kommentar in dieser Hinsicht froh.
– Was mir zuerst auffällt ist, dass du grundsätzlich auf das abschließende Semikolon verzichtest. Es gehört eigentlich dazu, auch wenn der Compiler versucht, es nachträglich einzusetzen.
– Es werden viele globale Variablen verwendet. Das wird v.a. dann zum Problem, wenn noch andere, fremde Scripts dazukommen sollten. Prinzipiell kann man das Ganze Spiel auch so einkapseln, dass keine einzige globale Variable nötig ist. Wenn du eine Variable im globalen Scope mit var
deklarierst, wird sie trotzdem global (lokal in window = global).
Das globale Objekt (window) hat ja ohnehin schon sehr viele Eigenschaften und Methoden, jede zusätzliche globale Variable vergrößert die Liste der zu durchsuchenden Namen im Scope. JavaScript ist perfomanter, wenn möglichst alle Variablen, auf die eine Funktion zugreift, im lokalen Scope liegen.
Wenn immer auf etwas außerhalb des lokalen Scope wie z.B. foo.bar.baz
mehrfach zugegriffen werden soll, ist es daher besser, den Wert bzw. eine Referenz lokal zu speichern, und dann mit der lokalen Variablen zu arbeiten, also nicht z.B. ein DOM-Element mehrfach raussuchen:
$("infobox").innerHTML = this.enemy.playername + " WINS!"
$("infobox").style.visibility = "visible"
Sondern nur einmal:
var infoBox = $("infobox");
infobox.innerHTML = this.enemy.playername + " WINS!";
infobox.style.visibility = "visible";
– Die Funktion document.getElementById durch eine namens $ zu ersetzen, ist nicht nötig. Es reicht, eine Referenz darauf in $ zu speichern:
var $ = document.getElementById;
Das war für mich so das Auffälligste, was man noch verbessern könnte.
Gruß, Don P
P.S.:
Da ich mir die Sprache vollständig selbst beigebracht habe,
Das kann ich von mir auch behaupten, d.h. wenn ich ehrlich bin, hab' ich sie hauptsächlich mit Hilfe des SELFHTML-Forums gelernt.
Das darf auch mal gesagt werden, obwohl viele am Forum herummeckern. Allein durch hier Mitlesen und dann selber Herumprobieren lernt man sehr viel, wenn man will. :)