Was ist der beste Weg, um Klassen (wie in OOP) in Javascript zu erstellen? Im Moment benutze ich das folgende Muster. Ist es in Ordnung?
%Vor%Es gibt keinen "besten" Weg. Es gibt ein paar OOP-Muster in JavaScript, und das von Ihnen erwähnte ist eines davon (und auch ein beliebtes). Es ist im Wesentlichen ein prototypisches (oder pseudoklassisches) Muster mit einer Schließung, um private klassenbasierte statische Variablen einzukapseln.
Es gibt andere Muster (z. B. das von Douglas Crockford empfohlene Funktionsmuster).
Ich persönlich empfehle das pseudoklassische Muster (obwohl das beste Muster ein heißes Thema ist).
Wenn Sie OOP mit JavaScript ausführen, empfehle ich stark , dass Sie eine JavaScript-Bibliothek mit eingebauter OOP in Betracht ziehen, beispielsweise Das Dojo-Toolkit oder die Closure-Bibliothek . Andere Bibliotheken (z. B. jQuery, MOOtools, Ext usw.) haben alle OOP-Module und / oder Plugins.
Meiner Meinung nach ist der beste Weg, um Klassen in JavaScript zu erstellen, "nicht". Verzeihen Sie, dass ich unverblümt bin, aber wenn Sie mit JavaScript arbeiten, versuchen Sie, Klassen zu vergessen - sie existieren hier nicht - und akzeptieren Sie, dass die Sprache nur Objekte betrifft.
Wenn Sie keine Klassen in der Sprache haben, bedeutet dies, dass weniger Code geschrieben werden muss. In typischen Anwendungen haben die meisten Objekte keine Geschwister. Sie haben immer nur eine document
, eine window
, eine userList
usw. Erstellen Sie diese Objekte mit der Objektliteralnotation:
Obwohl es in JavaScript keine Klassen gibt, gibt es Konstruktoren und Prototypen . Diese Konzepte sind nützlich, wenn Sie mehrere ähnliche Objekte haben (z. B. Benutzer in userlist
). Ihr Codebeispiel verwendet beide Konzepte. Mit Namen wie myclass
ist es schwer zu sagen, was Sie zu modellieren versuchen. Hier ist ein Beispiel für einen User
-Konstruktor und eine Erweiterung seines Prototyps:
Das folgende Beispiel zeigt ein Muster, das ich im Laufe der Zeit entwickelt habe.
Es nutzt Scoping, um private Felder und Methoden zuzulassen.
Eine ausführliche Diskussion finden Sie in JavaScript-Klassenmustern
%Vor%Javascript verwendet eine prototypische Vererbung.
Wenn Sie benutzerdefinierte Klassen erstellen möchten, würde ich empfehlen, zu lesen, worum es bei der prototypischen Vererbung geht, anstatt zu versuchen, die c # -Methodik auf js zu erzwingen (indem klassenbasierte Vererbung über prototypisch implementiert wird)
Tags und Links javascript oop