Was ist der empfohlene Ansatz für Hilfsfunktionen in JavaScript?

9

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. createPanewird 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 _createPaneist 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.
TaylorMac
quelle

Antworten:

4

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.

Mahdi
quelle
1
Mahdi, danke. Ich bin ein langjähriger JavaScript-Benutzer und ja, das ist der Grund, warum ich "Klasse" in Anführungszeichen geschrieben habe. Die Terminologie ist jedoch irreführend, und viele professionelle Organisationen bezeichnen die Konstruktorfunktionen von JavaScript als Klassen. developer.mozilla.org/en-US/docs/Web/JavaScript/…
TaylorMac
Und danke für den Vorschlag zur Einfachheit. Meine Frage betrifft mehr den Umfang als alles andere, die Zugänglichkeit. Streng gegen locker.
TaylorMac
@ TaylorMac Gern geschehen, hoffe es hilft.
Mahdi
1

Statik gehört zur Funktion IMO, in Ihrem Fall haben Sie eine private Statik, also ...

Panes._createPane=function(pane){}
Kennzeichen
quelle