Ich finde mich dabei, ein großes Projekt in Javascript zu programmieren. Ich erinnere mich, dass der letzte ein ziemliches Abenteuer war, weil hackiges JS schnell unlesbar werden kann und ich möchte, dass dieser Code sauber ist.
Nun, ich verwende Objekte, um eine Bibliothek zu erstellen, aber es gibt verschiedene Möglichkeiten, Dinge in JS zu definieren, was wichtige Konsequenzen für den Bereich, die Speicherverwaltung, den Namensraum usw. impliziert. EG:
- verwenden
var
oder nicht; - Definieren von Dingen in der Datei oder in einem
(function(){...})()
Abfragestil; - Verwenden
this
oder nicht; - mit
function myname()
odermyname = function()
; - Definieren von Methoden im Körper des Objekts oder Verwenden eines "Prototyps";
- etc.
Was sind also wirklich die Best Practices beim Codieren in OO in JS?
Hier werden wirklich akademische Erklärungen erwartet. Link zu Büchern herzlich willkommen, solange es um Qualität und Robustheit geht.
EDIT:
Ich habe einige Lesungen erhalten, bin aber immer noch sehr an Antworten auf die oben genannten Fragen und an bewährten Methoden interessiert.
quelle
Antworten:
Verwenden von `var` oder nicht
Sie sollten jede Variable mit dem einfügen
var
Anweisung , da sie sonst in den globalen Bereich gelangt.Es ist erwähnenswert, dass im strengen Modus (
"use strict";
) nicht deklarierte Variablenzuweisungen ausgelöst werdenReferenceError
.Derzeit hat JavaScript keinen Blockbereich. Die Crockford-Schule lehrt Sie, var-Anweisungen am Anfang des Funktionskörpers zu platzieren , während Dojos Style Guide dies liest alle Variablen im kleinstmöglichen Umfang deklariert werden sollten . (Die
let
Aussage und Definition in JavaScript 1.7 eingeführte ist nicht Teil des ECMAScript-Standards.)Es wird empfohlen, die Eigenschaften regelmäßig verwendeter Objekte an lokale Variablen zu binden, da dies schneller ist als das Nachschlagen der gesamten Bereichskette. (Sehen Optimieren von JavaScript für extreme Leistung und geringen Speicherverbrauch .)
Definieren von Dingen in der Datei oder in einem `(function () {...}) ()`
Wenn Sie Ihre Objekte nicht außerhalb Ihres Codes erreichen müssen, können Sie Ihren gesamten Code in einen Funktionsausdruck einschließen - dies wird als Modulmuster bezeichnet. Es bietet Leistungsvorteile und ermöglicht es, Ihren Code auf hohem Niveau zu minimieren und zu verdecken. Sie können auch sicherstellen, dass der globale Namespace nicht verschmutzt wird. Durch das Umschließen von Funktionen in JavaScript können Sie auch aspektorientiertes Verhalten hinzufügen. Ben Cherry hat einen ausführlichen Artikel über das Modulmuster .
Verwenden von "dies" oder nicht
Wenn Sie die pseudoklassische Vererbung in JavaScript verwenden, können Sie die Verwendung kaum vermeiden
this
. Es ist Geschmackssache, welches Vererbungsmuster Sie verwenden. In anderen Fällen lesen Sie den Artikel von Peter Michaux über JavaScript-Widgets ohne "dies" .Verwenden von `function myname ()` oder` myname = function (); `
function myname()
ist eine Funktionsdeklaration undmyname = function();
ein der Variablen zugewiesener Funktionsausdruckmyname
. Das letztere Formular gibt an, dass Funktionen erstklassige Objekte sind und Sie mit ihnen alles tun können, wie mit einer Variablen. Der einzige Unterschied zwischen ihnen besteht darin, dass alle Funktionsdeklarationen an die Spitze des Bereichs gehoben werden, was in bestimmten Fällen von Bedeutung sein kann. Ansonsten sind sie gleich.function foo()
ist eine Kurzform. Weitere Details zum Heben finden Sie im Artikel JavaScript Scoping and Hoisting .Methoden im Objektkörper definieren oder "Prototyp" verwenden
Es liegt an dir. JavaScript verfügt über vier Objekterstellungsmuster: pseudoklassisch, prototypisch, funktional und Teile ( Crockford, 2008 ). Jeder hat seine Vor- und Nachteile, sehen Sie Crockford in seinen Videogesprächen oder holen Sie sich sein Buch The Good Parts, wie Anon bereits vorgeschlagen hat .
Frameworks
Ich schlage vor, Sie greifen auf einige JavaScript-Frameworks zurück, studieren deren Konventionen und Stil und finden die Praktiken und Muster, die am besten zu Ihnen passen. Zum Beispiel das Dojo Toolkit bietet beispielsweise ein robustes Framework zum Schreiben von objektorientiertem JavaScript-Code, der sogar Mehrfachvererbung unterstützt.
Muster
Schließlich gibt es einen Blog, der sich mit gängigen JavaScript-Mustern und Anti-Mustern befasst . Lesen Sie auch die Frage Gibt es Codierungsstandards für JavaScript? im Stapelüberlauf.
quelle
let
in JavaScript 1.7 eingeführte Anweisung und Definition ist nicht Teil des ECMAScript-Standards." Jetzt ist es Teil von ES6.Ich werde einige Dinge aufschreiben, die ich gelesen oder in die Bewerbung aufgenommen habe, seit ich diese Frage gestellt habe. Die Leute, die es lesen, werden also nicht frustriert sein, da die meisten Antworten verkleidete RTMFs sind (auch wenn ich zugeben muss, dass vorgeschlagene Bücher gut sind).
Var Verwendung
Jede Variable soll bereits im höheren Bereich in JS deklariert sein. Wenn Sie also eine neue Variable möchten, deklarieren Sie sie, um böse Überraschungen wie die Manipulation einer globalen Variablen zu vermeiden, ohne sie zu bemerken.Verwenden Sie daher immer das Schlüsselwort var.
Variieren Sie in einem Objekt make die Variable private. Wenn Sie nur eine öffentliche Variable deklarieren möchten, verwenden Sie
this.my_var = my_value
dazu.Methoden deklarieren
In JS gibt es zahlreiche Möglichkeiten, Methoden zu deklarieren. Für einen OO-Programmierer ist es am natürlichsten und effizientesten, die folgende Syntax zu verwenden:
Im Objektkörper
Es gibt einen Nachteil: Innere Funktionen können aufgrund des lustigen JS-Bereichs nicht auf "dies" zugreifen. Douglas Crockford empfiehlt, diese Einschränkung mit einer herkömmlichen lokalen Variablen namens "that" zu umgehen. So wird es
Verlassen Sie sich nicht auf das automatische Zeilenende
JS versucht, automatisch
;
am Ende der Zeile hinzuzufügen , wenn Sie es vergessen. Verlassen Sie sich nicht auf dieses Verhalten, da Sie Fehler erhalten, die beim Debuggen ein Chaos sind.quelle
Lesen Sie zuerst etwas über die prototypbasierte Programmierung, damit Sie wissen, mit was für einem Biest Sie es zu tun haben, und werfen Sie dann einen Blick auf den JavaScript-Styleguide bei MDC und die JavaScript-Seite bei MDC . Ich finde es auch am besten, die Codequalität mit einem Tool zu erzwingen, dh. JavaScript Lint oder andere Varianten.
Best Practices mit OO klingen eher so, als ob Sie Muster finden möchten, als sich auf die Codequalität zu konzentrieren. Schauen Sie sich also die Google-Suche an: Javascript-Muster und jQuery-Muster .
quelle
Vielleicht möchten Sie Secrets of the JavaScript Ninja ausprobieren von John Resig (jQuery) ansehen. "Dieses Buch soll einen fortgeschrittenen JavaScript-Entwickler aufnehmen und ihm das Wissen vermitteln, das er benötigt, um eine browserübergreifende JavaScript-Bibliothek von Grund auf zu erstellen."
Der Entwurf ist über den Verlag erhältlich: http://www.manning.com/resig/
Douglas Crockford hat auch einige schöne JavaScript-Artikel auf seiner Homepage: http://www.crockford.com/
quelle
Ich fühle mich oft als der einzige hier, der MooTools für mein Javascript verwendet.
Es steht für M y O bject O riented Tools, mootools.
Ich mag ihre Einstellung zu OOP in Javascript sehr. Sie können ihre Klassenimplementierung auch zusammen mit jquery verwenden, sodass Sie jquery nicht loswerden müssen (obwohl mootools alles genauso gut macht).
Wie auch immer, lesen Sie den ersten Link gut durch und sehen Sie, was Sie denken. Der zweite Link führt zu den mootools-Dokumenten.
MooTools & Vererbung
MooTools-Klassen
quelle
Hier ist ein Buch, das die meisten Grundlagen abdeckt:
Objektorientiertes Javascript für hochwertige Anwendungen und Bibliotheken
quelle