JavaScript verfügt über ein klassenfreies Objektsystem, in dem Objekte Eigenschaften direkt von anderen Objekten erben. Das ist wirklich mächtig, aber klassisch ausgebildeten Programmierern unbekannt. Wenn Sie versuchen, klassische Entwurfsmuster direkt auf JavaScript anzuwenden, sind Sie frustriert. Wenn Sie jedoch lernen, mit dem Prototyp von JavaScript zu arbeiten, werden Ihre Bemühungen belohnt.
...
Es ist Lisp in Cs Kleidung.
Was bedeutet das für einen Spieleentwickler, der mit Canvas und HTML5 arbeitet? Ich habe mir diese Frage zu nützlichen Entwurfsmustern beim Spielen angesehen, aber die prototypische Vererbung unterscheidet sich stark von der klassischen Vererbung, und es gibt sicherlich Unterschiede in der besten Art und Weise, einige dieser allgemeinen Muster anzuwenden.
Zum Beispiel ermöglicht klassisches Erbe uns zu schaffen moveableEntity
Klasse und erweitern , dass mit allen Klassen, die sie bewegt in unserer Spielwelt ( player
, monster
, bullet
, etc.). Sicher, Sie können JavaScript stark aktivieren, um auf diese Weise zu arbeiten, aber auf diese Weise kämpfen Sie gegen seine Natur. Gibt es einen besseren Ansatz für diese Art von Problem, wenn wir die prototypische Vererbung zur Hand haben?
quelle
Wenn Sie sich wirklich mit der Semantik beschäftigen, werden Sie feststellen, dass JavaScript den meisten klassenbasierten Sprachen ein bisschen näher kommt als eine "echte" prototypische Sprache wie Self. So wie es
new
funktioniert, erstellen Sie fast immer ein Objekt, das Status in seinen eigenen Feldern und Methoden in den Feldern seines Prototyps enthält. Schiel deine Augen und das ist eine Klasse.Um wirklich prototypisch zu sein, gäbe es keine
new
. Sie klonen Objekte und führen eine differenzielle Vererbung durch.Sorgen Sie sich also nicht zu sehr um die halbprototypische Natur von JavaScript. Verstehe einfach drei Teile:
In den meisten Fällen handelt es sich bei Ihren Objekten im Wesentlichen um Instanzen einer "Klasse", in der der Konstruktor seine Felder definiert und die Funktionen der Konstruktoren
prototype
die Methode definieren.Wenn Sie eine vertraute Einzelvererbung im Java / C # -Stil wünschen, können Sie dies erreichen, indem Sie Prototypen verketten. Die meisten JS-Frameworks (Closure, Dojo usw.) bieten einige nützliche Hilfsmethoden für die Verkabelung.
Sie können jeder "Klasse" jederzeit Methoden hinzufügen. Fühlen Sie sich frei, Funktionen zu mischen, auf die Prototypen sie benötigen. Sie müssen nicht immer eine Vererbungskette und eine komplexe Hierarchie einrichten. Wenn Sie zehn Klassen haben, die dieselbe Methode benötigen, können Sie sie immer unbedingt zu diesen zehn Klassen hinzufügen.
quelle