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.