Apa pendekatan yang disarankan untuk fungsi pembantu dalam JavaScript?

10

Apa pendekatan yang direkomendasikan untuk fungsi pembantu? Saya ingin memilih satu teknik, dan menjalankannya untuk membuat "kelas" baru saya.

Berikut adalah opsi desain yang saya pertimbangkan:

Opsi 1: Fungsi pembantu dalam lingkup luar, aktifkan dengan konteks 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));
    });
}
  • Pro: Sintaks sederhana. createPanetidak dipublikasikan pada contoh ini.
  • Cons: createPane dapat diakses di ruang lingkup lain.

Opsi 2: Fungsi pembantu dalam penutupan, aktifkan dengan konteks instance

Panes.prototype.initialize = (function () {

    function createPane (pane) {
        // same logic as last createPane
    }

    return function (panes) {
        // same logic as before - calls createPane
    }

})();
  • Pro: createPane tidak dipublikasikan pada contoh ini.
  • Cons: keterbacaan lebih rendah dan testability; Pengujian pembantu ini harus terjadi dalam lingkup inisialisasi.

Opsi 3: Tambahkan _ ke nama untuk menunjukkan metode pribadi

Panes.prototype._createPane = function (pane) {
    // same logic as last createPane
}

Panes.prototype.initialize = function (panes) {
    // same logic as last, except calls this._createPane
}
  • Pro: Konteks tersirat dari _createPaneadalah contoh. Testability dari luar.
  • Cons: Mengekspos fungsi helper pada instance.

Opsi 4: Fungsi pembantu sebagai argumen

Panes.prototype.initialize = (function (createPane) {

    return function (panes) {
        // same logic as before - calls createPane
    }

})(function createPane () {
   // same logic as last createPane
});
  • Pro: createPane tidak dipublikasikan pada contoh ini. Fungsi pembantu tidak memiliki akses satu sama lain.
  • Cons: keterbacaan lebih rendah dan testability; Pengujian pembantu ini harus terjadi dalam lingkup inisialisasi.
TaylorMac
sumber

Jawaban:

4

JavaScript pertama tidak memiliki Kelas .

Kedua, opsi ketiga Anda tampaknya lebih rasional bagi saya, tetapi sangat tergantung pada kebutuhan Anda juga. Anda juga tidak perlu terlalu khawatir mengekspos fungsi pembantu. Pro dari solusi benar-benar membenarkan kompromi bagi saya.

Ketiga, waktu Anda sebagai pengembang sangat berharga; Jangan membuat tugas sepele sulit untuk diimplementasikan, memakan waktu dan lebih rentan terhadap kesalahan manusia. Kesederhanaan kode sumber adalah fitur yang hebat.

Mahdi
sumber
1
Mahdi terima kasih. Saya adalah pengguna lama JavaScript dan ya, itulah alasan mengapa saya menulis "kelas" dengan tanda kutip. Meskipun, terminologi itu menyesatkan, dan banyak organisasi profesional menyebut fungsi konstruktor JavaScript sebagai kelas. developer.mozilla.org/en-US/docs/Web/JavaScript/…
TaylorMac
Dan terima kasih atas sarannya tentang kesederhanaan. Pertanyaan saya lebih tentang ruang lingkup daripada apa pun, aksesibilitas. Ketat vs. Longgar.
TaylorMac
@TaylorMac Terima kasih kembali, semoga membantu.
Mahdi
@ Mahdi, Javrencript currenlty memiliki kelas.
Menai Ala Eddine
1

Statika berasal dari Fungsi IMO, dalam kasus Anda, Anda memiliki statis privat, jadi ...

Panes._createPane=function(pane){}
Menandai
sumber