¿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.
createPane
no 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
_createPane
es 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.
fuente