วิธีที่แนะนำสำหรับฟังก์ชั่นผู้ช่วยคืออะไร? ฉันต้องการเลือกหนึ่งเทคนิคและดำเนินการเพื่อสร้าง "คลาส" ใหม่ของฉัน
นี่คือตัวเลือกการออกแบบที่ฉันได้ครุ่นคิด:
ตัวเลือกที่ 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
ไม่มีการเผยแพร่ในอินสแตนซ์ ฟังก์ชั่นตัวช่วยเหลือขาดการเข้าถึงซึ่งกันและกัน - ข้อด้อย: การอ่านและทดสอบที่ต่ำกว่า การทดสอบผู้ช่วยนี้จะต้องเกิดขึ้นในขอบเขตของการเริ่มต้น