วิธีที่แนะนำสำหรับฟังก์ชั่นตัวช่วยใน JavaScript คืออะไร?


10

วิธีที่แนะนำสำหรับฟังก์ชั่นผู้ช่วยคืออะไร? ฉันต้องการเลือกหนึ่งเทคนิคและดำเนินการเพื่อสร้าง "คลาส" ใหม่ของฉัน

นี่คือตัวเลือกการออกแบบที่ฉันได้ครุ่นคิด:

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

คำตอบ:


4

แรก JavaScript ไม่ได้มีการเรียนการสอน

ประการที่สองตัวเลือกที่สามของคุณดูเหมือนสมเหตุสมผลกับฉันมาก แต่ก็ขึ้นอยู่กับความต้องการของคุณเช่นกัน นอกจากนี้คุณไม่ควรกังวลเกี่ยวกับการเปิดเผยฟังก์ชันตัวช่วย ข้อดีของการแก้ปัญหาทั้งหมดนั้นแสดงให้เห็นถึงการประนีประนอมกับฉัน

ประการที่สามเวลาของคุณในฐานะนักพัฒนามีค่า อย่าทำงานหนัก ๆ ให้ยุ่งยากใช้เวลานานและเป็นข้อผิดพลาดของมนุษย์ ความเรียบง่ายของซอร์สโค้ดเป็นคุณสมบัติที่ยอดเยี่ยม


1
มาห์ขอบคุณ ฉันเป็นผู้ใช้ JavaScript นานและใช่นั่นคือเหตุผลที่ฉันเขียน "class" ในเครื่องหมายคำพูด แม้ว่าคำศัพท์จะทำให้เข้าใจผิดและองค์กรวิชาชีพหลายแห่งอ้างถึงฟังก์ชันตัวสร้างของ JavaScript เป็นคลาส developer.mozilla.org/en-US/docs/Web/JavaScript/…
TaylorMac

และขอบคุณสำหรับคำแนะนำเกี่ยวกับความเรียบง่าย คำถามของฉันเกี่ยวกับขอบเขตมากกว่าสิ่งใดการเข้าถึงได้ง่าย เข้มงวดกับหลวม
TaylorMac

@TaylorMac คุณยินดีมากหวังว่าจะช่วยได้
Mahdi

@Mahdi, currenlty Javscript มีคลาส
Menai Ala Eddine

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.