Yardımcı fonksiyonlar için önerilen yaklaşım nedir? Bir teknik seçmek ve onunla birlikte yeni bir "sınıf" oluşturmak için koşmak istiyorum.
İşte düşündüğüm tasarım seçenekleri:
Seçenek 1: Dış kapsamda yardımcı işlevi, örnek bağlamıyla çağırın
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));
});
}
- Artıları: Basit sözdizimi.
createPaneörnekte yayınlanmadı. - Eksileri:
createPanediğer kapsamlarda erişilebilir.
Seçenek 2: Kapanıştaki yardımcı işlev, örnek bağlamıyla çağırın
Panes.prototype.initialize = (function () {
function createPane (pane) {
// same logic as last createPane
}
return function (panes) {
// same logic as before - calls createPane
}
})();
- Artıları:
createPaneörnekte yayınlanmaz. - Eksileri: Düşük okunabilirlik ve test edilebilirlik; Bu yardımcı teste başlama sırasında yapılmalıdır.
Seçenek 3: Özel bir yöntemi belirtmek için _ adını ada ekle
Panes.prototype._createPane = function (pane) {
// same logic as last createPane
}
Panes.prototype.initialize = function (panes) {
// same logic as last, except calls this._createPane
}
- Artıları: Örneğinin örtük bağlamı
_createPanebudur. Dışarıdan test edilebilirlik. - Eksileri: Örneğe yardımcı işlevi gösterme.
Seçenek 4: Yardımcı argüman olarak işlev görür
Panes.prototype.initialize = (function (createPane) {
return function (panes) {
// same logic as before - calls createPane
}
})(function createPane () {
// same logic as last createPane
});
- Artıları:
createPaneörnekte yayınlanmaz. Yardımcı işlevlerin birbirine erişimi yoktur. - Eksileri: Düşük okunabilirlik ve test edilebilirlik; Bu yardımcı teste başlama sırasında yapılmalıdır.