วิธีที่แนะนำสำหรับฟังก์ชั่นผู้ช่วยคืออะไร? ฉันต้องการเลือกหนึ่งเทคนิคและดำเนินการเพื่อสร้าง "คลาส" ใหม่ของฉัน
นี่คือตัวเลือกการออกแบบที่ฉันได้ครุ่นคิด:
ตัวเลือกที่ 1: ฟังก์ชันผู้ช่วยในขอบเขตด้านนอกเรียกใช้ด้วยบริบทของอินสแตนซ์
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));
    });
}
- จุดเด่น:ไวยากรณ์ง่าย ๆ createPaneไม่ได้เผยแพร่ในอินสแตนซ์
- ข้อด้อย: createPaneสามารถเข้าถึงได้ในขอบเขตอื่น
ตัวเลือก 2: ปิดฟังก์ชันผู้ช่วยเรียกใช้ด้วยบริบทของอินสแตนซ์
Panes.prototype.initialize = (function () {
    function createPane (pane) {
        // same logic as last createPane
    }
    return function (panes) {
        // same logic as before - calls createPane
    }
})();
- ข้อดี: createPaneไม่มีการเผยแพร่ในอินสแตนซ์
- ข้อด้อย: การอ่านและทดสอบที่ต่ำกว่า การทดสอบผู้ช่วยนี้จะต้องเกิดขึ้นในขอบเขตของการเริ่มต้น
ตัวเลือกที่ 3: เตรียม _ เพื่อตั้งชื่อเพื่อระบุวิธีการส่วนตัว
Panes.prototype._createPane = function (pane) {
    // same logic as last createPane
}
Panes.prototype.initialize = function (panes) {
    // same logic as last, except calls this._createPane
}
- ข้อดี:บริบทโดยนัยของ_createPaneเป็นตัวอย่าง ทดสอบได้จากภายนอก
- ข้อด้อย:การเปิดเผยฟังก์ชันตัวช่วยในอินสแตนซ์
ตัวเลือก 4: ฟังก์ชันผู้ช่วยเป็นอาร์กิวเมนต์
Panes.prototype.initialize = (function (createPane) {
    return function (panes) {
        // same logic as before - calls createPane
    }
})(function createPane () {
   // same logic as last createPane
});
- ข้อดี: createPaneไม่มีการเผยแพร่ในอินสแตนซ์ ฟังก์ชั่นตัวช่วยเหลือขาดการเข้าถึงซึ่งกันและกัน
- ข้อด้อย: การอ่านและทดสอบที่ต่ำกว่า การทดสอบผู้ช่วยนี้จะต้องเกิดขึ้นในขอบเขตของการเริ่มต้น