Cách tiếp cận được đề nghị cho các chức năng của người trợ giúp là gì? Tôi muốn chọn một kỹ thuật và chạy với nó để tạo ra "lớp" mới của mình.
Dưới đây là các tùy chọn thiết kế tôi đã suy nghĩ:
Tùy chọn 1: Hàm trợ giúp trong phạm vi bên ngoài, gọi với ngữ cảnh của thể hiệ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));
});
}
- Ưu điểm: Cú pháp đơn giản.
createPane
không được công bố trên ví dụ. - Nhược điểm:
createPane
có thể truy cập trong phạm vi khác.
Tùy chọn 2: Hàm trợ giúp đóng, gọi với ngữ cảnh của thể hiện
Panes.prototype.initialize = (function () {
function createPane (pane) {
// same logic as last createPane
}
return function (panes) {
// same logic as before - calls createPane
}
})();
- Ưu điểm:
createPane
không được công bố trên ví dụ. - Nhược điểm: Khả năng đọc và kiểm tra thấp hơn; Thử nghiệm của người trợ giúp này phải xảy ra trong phạm vi khởi tạo.
Tùy chọn 3: Chuẩn bị _ để đặt tên để chỉ ra một phương thức riêng tư
Panes.prototype._createPane = function (pane) {
// same logic as last createPane
}
Panes.prototype.initialize = function (panes) {
// same logic as last, except calls this._createPane
}
- Ưu điểm: bối cảnh tiềm ẩn
_createPane
là ví dụ. Khả năng kiểm tra từ bên ngoài. - Nhược điểm: Phơi bày chức năng của người trợ giúp trên ví dụ.
Tùy chọn 4: Hàm trợ giúp làm đối số
Panes.prototype.initialize = (function (createPane) {
return function (panes) {
// same logic as before - calls createPane
}
})(function createPane () {
// same logic as last createPane
});
- Ưu điểm:
createPane
không được công bố trên ví dụ. Các chức năng trợ giúp thiếu quyền truy cập lẫn nhau. - Nhược điểm: Khả năng đọc và kiểm tra thấp hơn; Thử nghiệm của người trợ giúp này phải xảy ra trong phạm vi khởi tạo.