Qual è l'approccio consigliato per le funzioni di supporto in JavaScript?

8

Qual è l'approccio consigliato per le funzioni di supporto? Vorrei scegliere una tecnica e usarla per creare la mia nuova "classe".

Ecco le opzioni di progettazione che ho preso in considerazione:

Opzione 1: funzione di supporto in ambito esterno, invoca con contesto di istanza

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));
    });
}
  • Pro: sintassi semplice. createPane non è pubblicato sull'istanza.
  • Contro: createPane è accessibile in altri ambiti.

Opzione 2: funzione di supporto in chiusura, invoca con contesto di istanza

Panes.prototype.initialize = (function () {

    function createPane (pane) {
        // same logic as last createPane
    }

    return function (panes) {
        // same logic as before - calls createPane
    }

})();
  • Vantaggi: createPane non è pubblicato sull'istanza.
  • Contro: minore leggibilità e testabilità; Il test di questo helper deve avvenire nell'ambito di inizializzazione.

Opzione 3: Prependa _ al nome per indicare un metodo privato

Panes.prototype._createPane = function (pane) {
    // same logic as last createPane
}

Panes.prototype.initialize = function (panes) {
    // same logic as last, except calls this._createPane
}
  • Vantaggi: Il contesto implicito di _createPane è l'istanza. Testabilità dall'esterno.
  • Contro: Esposizione della funzione di supporto sull'istanza.

Opzione 4: Helper funziona come argomento

Panes.prototype.initialize = (function (createPane) {

    return function (panes) {
        // same logic as before - calls createPane
    }

})(function createPane () {
   // same logic as last createPane
});
  • Vantaggi: createPane non è pubblicato sull'istanza. Le funzioni di supporto non hanno accesso l'un l'altro.
  • Contro: minore leggibilità e testabilità; Il test di questo helper deve avvenire nell'ambito di inizializzazione.
posta TaylorMac 10.04.2014 - 19:11
fonte

2 risposte

4

Il primo JavaScript non ha Classi .

In secondo luogo, la terza opzione mi sembra più razionale, ma dipende molto anche dalle tue esigenze. Inoltre non dovresti essere molto preoccupato di esporre la funzione di supporto. I professionisti della soluzione giustificano totalmente il compromesso per me.

In terzo luogo, il tuo tempo come sviluppatore è prezioso; Non rendere difficili da implementare compiti banali, che richiedono molto tempo e più pronunce agli errori umani. La semplicità del codice sorgente è una grande funzionalità in sé.

    
risposta data 10.04.2014 - 20:25
fonte
1

Le statistiche appartengono alla funzione IMO, nel tuo caso hai una statica privata, quindi ...

Panes._createPane=function(pane){}
    
risposta data 28.07.2014 - 08:17
fonte

Leggi altre domande sui tag