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.
createPane
tidak 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
_createPane
adalah 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.