¿Cuál es el enfoque recomendado para las funciones de ayuda en JavaScript?

10

¿Cuál es el enfoque recomendado para las funciones auxiliares? Me gustaría elegir una técnica y ejecutarla para crear mi nueva "clase".

Estas son las opciones de diseño que he meditado:

Opción 1: función auxiliar en el ámbito externo, invocar con contexto de instancia

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));
    });
}
  • Pros: sintaxis simple. createPaneno está publicado en la instancia.
  • Contras: createPane es accesible en otros ámbitos.

Opción 2: función auxiliar en cierre, invocar con contexto de instancia

Panes.prototype.initialize = (function () {

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

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

})();
  • Pros: createPane no se publica en la instancia.
  • Contras: menor legibilidad y comprobabilidad; La prueba de este ayudante debe ocurrir en el ámbito de la inicialización.

Opción 3: anteponer _ al nombre para indicar un método privado

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

Panes.prototype.initialize = function (panes) {
    // same logic as last, except calls this._createPane
}
  • Pros: El contexto implícito de _createPanees la instancia. Testabilidad desde el exterior.
  • Contras: Exponer la función auxiliar en la instancia.

Opción 4: funciones auxiliares como argumentos

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

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

})(function createPane () {
   // same logic as last createPane
});
  • Pros: createPane no se publica en la instancia. Las funciones auxiliares carecen de acceso entre sí.
  • Contras: menor legibilidad y comprobabilidad; La prueba de este ayudante debe ocurrir en el ámbito de la inicialización.
TaylorMac
fuente

Respuestas:

4

Primero JavaScript no tiene clases .

En segundo lugar, su tercera opción me parece más racional, pero también depende en gran medida de sus requisitos. Además, no debe preocuparse demasiado por exponer la función auxiliar. Los pros de la solución justifican totalmente el compromiso para mí.

Tercero, su tiempo como desarrollador es valioso; No haga que las tareas triviales sean difíciles de implementar, consuman mucho tiempo y sean más prontas para errores humanos. La simplicidad del código fuente es una gran característica en sí misma.

Mahdi
fuente
1
Mahdi gracias. Soy un usuario de JavaScript desde hace mucho tiempo y sí, esa es la razón por la que escribí "clase" entre comillas. Aunque, la terminología es engañosa, y muchas organizaciones profesionales se refieren a las funciones de construcción de JavaScript como clases. developer.mozilla.org/en-US/docs/Web/JavaScript/…
TaylorMac
Y gracias por la sugerencia sobre simplicidad. Mi pregunta es más sobre el alcance que cualquier otra cosa, la accesibilidad. Estricto vs flojo.
TaylorMac
@TaylorMac De nada, espero que ayude.
Mahdi
@Mahdi, la actualidad Javscript tiene clases.
Menai Ala Eddine
1

Las estadísticas pertenecen a la función IMO, en su caso tiene una estática privada, así que ...

Panes._createPane=function(pane){}
marca
fuente