JavaScript'te yardımcı işlevler için önerilen yaklaşım nedir?


10

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: createPane diğ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.

Yanıtlar:


4

İlk JavaScript'in Sınıfları yoktur .

İkincisi, üçüncü seçeneğiniz benim için daha rasyonel görünüyor, ancak gereksinimlerinize de bağlı. Ayrıca yardımcı fonksiyonun ortaya çıkması konusunda fazla endişelenmemelisiniz. Çözümün artıları bana uzlaşmayı haklı çıkarıyor.

Üçüncüsü, bir geliştirici olarak geçirdiğiniz zaman değerlidir; Önemsiz görevleri yerine getirmeyi zor, zaman alıcı ve insan hatalarına daha açık hale getirmeyin. Kaynak kodun sadeliği harika bir özelliktir.


1
Mehdi teşekkür ederim. Ben uzun zamandır JavaScript kullanıcısıyım ve evet, bu yüzden tırnak içinde "sınıf" yazdım. Bununla birlikte, terminoloji yanıltıcıdır ve birçok profesyonel kuruluş JavaScript'in yapıcı işlevlerine sınıf olarak atıfta bulunmaktadır. developer.mozilla.org/tr-TR/docs/Web/JavaScript/…
TaylorMac

Ve basitlik önerisi için teşekkür ederim. Benim sorum kapsam hakkında her şeyden çok erişilebilirlik. Sıkı ve Gevşek.
TaylorMac

@TaylorMac Çok hoş geldiniz, umarım yardımcı olur.
Mehdi

@Mahdi, currenlty Javscript sınıfları var.
Menai Ala Eddine

1

Statik Fonksiyon IMO'suna aittir, sizin durumunuzda özel bir statik var, bu yüzden ...

Panes._createPane=function(pane){}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.