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.
object-oriented
javascript
TaylorMac
la source
la source
Réponses:
Le premier JavaScript n'a pas de classes .
Deuxièmement, votre troisième option me semble plus rationnelle, mais elle dépend aussi fortement de vos besoins. De plus, vous ne devriez pas trop vous inquiéter d'exposer la fonction d'assistance. Les avantages de la solution me justifient totalement le compromis.
Troisièmement, votre temps en tant que développeur est précieux; Ne rendez pas les tâches triviales difficiles à mettre en œuvre, longues et plus sensibles aux erreurs humaines. La simplicité du code source est une grande fonctionnalité en soi.
la source
La statique appartient à la fonction IMO, dans votre cas, vous avez une statique privée, donc ...
la source