Was ist der empfohlene Ansatz für Hilfsfunktionen? Ich möchte eine Technik auswählen und damit arbeiten, um meine neue "Klasse" zu erstellen.
Hier sind die Gestaltungsmöglichkeiten, über die ich nachgedacht habe:
Option 1: Hilfsfunktion im äußeren Bereich, Aufruf mit Instanzkontext
function createPane (pane) {
// logic to create pane
var proto = Object.create(this.paneList);
$.extend(paneProto, pane);
return paneProto;
}
Panes.prototype.initialize = function (panes) {
var _this = this;
_.each(panes, function () {
_this.panes.push(createPane.call(_this, this));
});
}
- Vorteile: Einfache Syntax.
createPane
wird nicht auf der Instanz veröffentlicht. - Nachteile:
createPane
ist in anderen Bereichen verfügbar.
Option 2: Hilfsfunktion beim Schließen, Aufruf mit Instanzkontext
Panes.prototype.initialize = (function () {
function createPane (pane) {
// same logic as last createPane
}
return function (panes) {
// same logic as before - calls createPane
}
})();
- Vorteile:
createPane
wird nicht auf der Instanz veröffentlicht. - Nachteile: Geringere Lesbarkeit und Testbarkeit; Das Testen dieses Hilfsprogramms muss im Rahmen der Initialisierung erfolgen.
Option 3: Stellen Sie _ vor den Namen, um eine private Methode anzugeben
Panes.prototype._createPane = function (pane) {
// same logic as last createPane
}
Panes.prototype.initialize = function (panes) {
// same logic as last, except calls this._createPane
}
- Vorteile: Impliziter Kontext von
_createPane
ist die Instanz. Testbarkeit von außen. - Nachteile: Anzeigen der Hilfsfunktion für die Instanz.
Option 4: Der Helfer fungiert als Argumente
Panes.prototype.initialize = (function (createPane) {
return function (panes) {
// same logic as before - calls createPane
}
})(function createPane () {
// same logic as last createPane
});
- Vorteile:
createPane
wird nicht auf der Instanz veröffentlicht. Hilfsfunktionen haben keinen Zugriff aufeinander. - Nachteile: Geringere Lesbarkeit und Testbarkeit; Das Testen dieses Hilfsprogramms muss im Rahmen der Initialisierung erfolgen.
object-oriented
javascript
TaylorMac
quelle
quelle
Antworten:
Zuerst hat JavaScript keine Klassen .
Zweitens erscheint mir Ihre dritte Option rationaler, hängt aber auch stark von Ihren Anforderungen ab. Sie sollten sich auch keine großen Sorgen machen, wenn Sie die Hilfsfunktion freigeben. Die Vorteile der Lösung rechtfertigen den Kompromiss für mich völlig.
Drittens ist Ihre Zeit als Entwickler wertvoll; Machen Sie triviale Aufgaben nicht schwer zu implementieren, zeitaufwändig und fehleranfälliger. Die Einfachheit des Quellcodes ist selbst eine großartige Funktion.
quelle
Statik gehört zur Funktion IMO, in Ihrem Fall haben Sie eine private Statik, also ...
quelle