Cách tiếp cận được đề xuất cho các hàm trợ giúp trong JavaScript là gì?


9

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. createPanekhô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 _createPanelà 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.

Câu trả lời:


4

JavaScript đầu tiên không có Classes .

Thứ hai, tùy chọn thứ ba của bạn có vẻ hợp lý hơn đối với tôi, nhưng nó cũng phụ thuộc nhiều vào yêu cầu của bạn. Ngoài ra, bạn không nên lo lắng nhiều về việc phơi bày chức năng của người trợ giúp. Ưu điểm của giải pháp hoàn toàn biện minh cho sự thỏa hiệp với tôi.

Thứ ba, thời gian của bạn là một nhà phát triển là có giá trị; Đừng làm những nhiệm vụ tầm thường khó thực hiện, tốn thời gian và rõ ràng hơn đối với lỗi của con người. Đơn giản của mã nguồn là một tính năng tuyệt vời của chính nó.


1
Mahdi cảm ơn bạn. Tôi là một người dùng JavaScript lâu năm và vâng, đó là lý do tại sao tôi viết "lớp" trong dấu ngoặc kép. Mặc dù, thuật ngữ là sai lệch và nhiều tổ chức chuyên nghiệp coi các hàm xây dựng của JavaScript là các lớp. developer.mozilla.org/en-US/docs/Web/JavaScript/ từ
TaylorMac

Và cảm ơn bạn đã gợi ý về sự đơn giản. Câu hỏi của tôi là về phạm vi nhiều hơn bất cứ điều gì, khả năng tiếp cận. Nghiêm khắc so với lỏng lẻo.
TaylorMac

@TaylorMac Bạn rất hoan nghênh, hy vọng nó có ích.
Mahdi

1

Statics thuộc về Hàm IMO, trong trường hợp của bạn, bạn có một trạng thái tĩnh riêng tư, vì vậy ...

Panes._createPane=function(pane){}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.