Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

08.03.2015, 22:03

Wenn man größere Projekte mit JS angehen will, könnte ein Blick auf Typescript lohnen, damit wird JS um echte Klassen und Typen für die Entwicklung erweitert und am Ende kommt dann JS-Code raus. http://typescriptlang.org/

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

12

08.03.2015, 22:43

Keiner der verlinkten Artikel beschreibt, warum that = this notwendig/sinnvoll sein soll. Hätte der Ersteller des Artikels JavaScript ausreichend verstanden, dann wüsste er, dass die Funktion Kampfpanzer nur ein Selbstreferenz auf sich selbst hat, nicht aber auf Spezialpanzer-Objekte. Würden die Member ordentlich dem Objekt angehangen werden, würden sie über den Aufruf die richtige selbst-Referenz zugewiesen bekommen. Dass "freie Funktionen" (keinem Objekt zugewiesen/keine Member), auch wenn sie im Konstruktor definiert wurden, sollte man ebenfalls wissen.

Auch wenn man es nicht mag, sind ein paar Dinge zu beachten, wenn man mit JavaScript arbeitet: Es gibt keine Einschränkungen der Sichbarkeit (private/protected), was genauso auch für diverse andere, dynamisch typisierte Sprachen gilt, wie bspw. Python. Wenn man es sich also so einfach wie möglich machen möchte, sollte man auch nicht probieren, diese auf andere Weise zu implementieren. Sollte man darauf aber nicht verzichten können, wird man sich der Closures und ggf. zusätzlicher Objekte bedienen müssen. Man sollte das aber nur dann probieren, wenn man sich ausreichend mit JavaScript auskennt.
JavaScript baut auf der Prototype-Chain für die Vererbung auf. Damit bspw. das Schlüsselwort instanceof richtig funktioniert. müssen die Prototypen _zwingend_ richtig gesetzt sein. Erstellt man aber Variablen und Funktionen im Scope des Konstruktors (mit Memberfunktionen, die darauf zugreifen -> Closure), dann sind die im Prototyp erzeugten Variablen und Methoden quasi statisch für alle abgeleiteten Objekte. (Der 2. Code des 1. Links hatte ein ähnliches Problem). Es lässt sich wahrscheinlich für alle Probleme etwas finden, wie man diese beheben kann, um "private" Member zu erhalten, allerdings halte ich es für einfacher, Konventionen festzulegen und diese einzuhalten (wie es auch bei Python der Fall ist).

Den 2. Link werde ich mir später mal ansehen...


Ich habe mir bisher keine JS-Alternativen angesehen, grundsätzlich dürften diese durchaus einen Blick wert sein. Es gibt allerdings noch weitere Varianten, wie CoffeScript o. ä. Wichtig zu beachten ist aber auch, wie gut man mit diesen auf bestehende JavaScriptFrameworks zugreifen kann, wie Feature-Detection aussieht (prüfen, ob bestimmte Funktionen definiert sind) etc.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].