Quelle est l'approche recommandée pour les fonctions d'assistance? Je voudrais choisir une technique et courir avec elle pour créer ma nouvelle "classe".
Voici les options de conception que j'ai envisagées:
Option 1: fonction d'assistance dans la portée externe, invoquer avec le contexte de l'instance
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));
});
}
- Avantages: syntaxe simple.
createPane
n'est pas publié sur l'instance. - Inconvénients:
createPane
est accessible dans d'autres étendues.
Option 2: fonction d'assistance en fermeture, invoquer avec le contexte de l'instance
Panes.prototype.initialize = (function () {
function createPane (pane) {
// same logic as last createPane
}
return function (panes) {
// same logic as before - calls createPane
}
})();
- Avantages:
createPane
n'est pas publié sur l'instance. - Inconvénients: lisibilité et testabilité inférieures; Le test de cet assistant doit avoir lieu dans le cadre de l'initialisation.
Option 3: ajouter _ au nom pour indiquer une méthode privée
Panes.prototype._createPane = function (pane) {
// same logic as last createPane
}
Panes.prototype.initialize = function (panes) {
// same logic as last, except calls this._createPane
}
- Avantages: Le contexte implicite de
_createPane
est l'instance. Testabilité de l'extérieur. - Inconvénients: exposer la fonction d'assistance sur l'instance.
Option 4: les fonctions d'assistance comme arguments
Panes.prototype.initialize = (function (createPane) {
return function (panes) {
// same logic as before - calls createPane
}
})(function createPane () {
// same logic as last createPane
});
- Avantages:
createPane
n'est pas publié sur l'instance. Les fonctions d'assistance n'ont pas accès les unes aux autres. - Inconvénients: lisibilité et testabilité inférieures; Le test de cet assistant doit avoir lieu dans le cadre de l'initialisation.