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.
object-oriented
javascript
TaylorMac
sumber
sumber
Jawaban:
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.
sumber
Statika berasal dari Fungsi IMO, dalam kasus Anda, Anda memiliki statis privat, jadi ...
sumber