¿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.
object-oriented
javascript
TaylorMac
fuente
fuente
Respuestas:
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.
fuente
Las estadísticas pertenecen a la función IMO, en su caso tiene una estática privada, así que ...
fuente