Jakie jest zalecane podejście do funkcji pomocniczych? Chciałbym wybrać jedną technikę i uruchomić ją, aby stworzyć moją nową „klasę”.
Oto opcje projektowania, które rozważałem:
Opcja 1: Funkcja pomocnicza w zewnętrznym zasięgu, wywoływana w kontekście instancji
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));
});
}
- Plusy: prosta składnia.
createPane
nie jest opublikowany w instancji. - Minusy:
createPane
jest dostępny w innych zakresach.
Opcja 2: Funkcja pomocnika w zamknięciu, wywołaj w kontekście instancji
Panes.prototype.initialize = (function () {
function createPane (pane) {
// same logic as last createPane
}
return function (panes) {
// same logic as before - calls createPane
}
})();
- Plusy:
createPane
nie są publikowane w instancji. - Wady: niższa czytelność i testowalność; Testowanie tego pomocnika musi odbywać się w zakresie inicjalizacji.
Opcja 3: Wstaw nazwę _, aby wskazać metodę prywatną
Panes.prototype._createPane = function (pane) {
// same logic as last createPane
}
Panes.prototype.initialize = function (panes) {
// same logic as last, except calls this._createPane
}
- Plusy: niejawny kontekst
_createPane
jest instancją. Testowalność z zewnątrz. - Wady: udostępnianie funkcji pomocniczej w instancji.
Opcja 4: Pomocnik działa jako argument
Panes.prototype.initialize = (function (createPane) {
return function (panes) {
// same logic as before - calls createPane
}
})(function createPane () {
// same logic as last createPane
});
- Plusy:
createPane
nie są publikowane w instancji. Funkcje pomocnicze nie mają do siebie dostępu. - Wady: niższa czytelność i testowalność; Testowanie tego pomocnika musi odbywać się w zakresie inicjalizacji.