ข้อควรระวังในการแยกเมธอดและการประยุกต์ฟังก์ชันบางส่วน
แก้ปัญหาการแยกเมธอดด้วย call/apply/bind และเรียนรู้รูปแบบการประยุกต์ฟังก์ชันบางส่วนขนาดเล็กด้วย bind และฟังก์ชันลูกศรห่อหุ้ม
ข้อควรระวังในการแยกเมธอดและการประยุกต์ฟังก์ชันบางส่วน เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
ภาพรวม
เป้าหมาย: คงค่า this ไว้หลังการดึงออก และกำหนดอาร์กิวเมนต์ล่วงหน้า
- call(thisArg, a, b)
- apply(thisArg, [a, b])
- bind(thisArg, a) → ส่งคืนฟังก์ชันใหม่
- การประยุกต์ใช้บางส่วนด้วย bind หรือฟังก์ชันลูกศรขนาดเล็ก

ข้อควรระวังในการดึงออก
การเรียกเป็น obj.method() จะทำงานได้ แต่การดึงฟังก์ชันออกจะทำให้อ็อบเจ็กต์หายไปและทำให้ this ทำงานผิดพลาด
// Extraction loses this
const user = {
name: "Ayla",
label: function (prefix) {
return prefix + ":" + this.name;
}
};
console.log("method call:", user.label("Hi")); // "Hi:Ayla"
// Extract
const f = user.label;
console.log("extracted:", f("Hi")); // this is missing -> "Hi:undefined" (in strict mode this is undefined)

call/apply สำหรับการเรียกครั้งเดียว
call และ apply ช่วยให้กำหนด this สำหรับการเรียกใช้เพียงครั้งเดียวได้
// Fix by passing this explicitly using call/apply
console.log("call :", f.call(user, "Hi")); // "Hi:Ayla"
console.log("apply:", f.apply(user, ["Yo"])); // "Yo:Ayla"

bind สำหรับนำกลับมาใช้ซ้ำ
bind จะสร้างฟังก์ชันที่จดจำค่า this ไว้ คุณจึงเรียกใช้ได้หลายครั้งโดยไม่ต้องผูกค่าใหม่
// bind returns a new function with this fixed
const bound = f.bind(user);
console.log("bound once:", bound("Hey")); // "Hey:Ayla"
console.log("bound again:", bound("Yo")); // "Yo:Ayla"

การประยุกต์ใช้บางส่วน (แบบง่าย)
ใช้ bind เพื่อกำหนดอาร์กิวเมนต์ตัวแรก ๆ ล่วงหน้า หรือใช้ ตัวห่อหุ้มด้วย arrow ขนาดเล็กเพื่อทำให้ค่าและ this คงที่
// Partial application: pre-fill arguments
function add(a, b, c) { return a + b + c; }
// Using bind: pre-fill a=10
const add10 = add.bind(null, 10);
console.log("add10(1,2):", add10(1, 2)); // 13
// Using an arrow wrapper: pre-fill prefix
const labelHi = function (obj) {
return function () { return obj.label("Hi"); };
}(user);
console.log("arrow partial:", labelHi()); // "Hi:Ayla"

รูปแบบการใช้งานจริง
เคล็ดลับ:
- เมธอดที่ถูกดึงออก: ใช้ bind เพียงครั้งเดียวแล้วนำกลับมาใช้ซ้ำ
- การเรียกครั้งเดียว: ใช้ call/apply
- ต้องการกำหนดอาร์กิวเมนต์ล่วงหน้าหรือไม่ ใช้ bind หรือตัวห่อหุ้มด้วย arrow ขนาดเล็ก
- เขียนฟังก์ชันช่วยให้เล็กและตั้งชื่อให้ชัดเจน

แบบทดสอบ bind เทียบกับ call/apply
ตรวจสอบอย่างรวดเร็ว: คงค่า this และกำหนดอาร์กิวเมนต์ล่วงหน้า

สรุปทบทวน
สรุปทบทวน: การดึงออกทำให้สูญเสีย this ใช้ call/apply สำหรับการเรียกครั้งเดียว และใช้ bind เพื่อแก้ค่า this และนำกลับมาใช้ซ้ำ สำหรับการประยุกต์ใช้บางส่วน ให้ใช้ bind หรือฟังก์ชันลูกศรขนาดเล็กเพื่อกำหนดค่าล่วงหน้า

คำถามที่พบบ่อย
บทเรียน “ข้อควรระวังในการแยกเมธอดและการประยุกต์ฟังก์ชันบางส่วน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ข้อควรระวังในการแยกเมธอดและการประยุกต์ฟังก์ชันบางส่วน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ข้อควรระวังในการแยกเมธอดและการประยุกต์ฟังก์ชันบางส่วน”
แก้ปัญหาการแยกเมธอดด้วย call/apply/bind และเรียนรู้รูปแบบการประยุกต์ฟังก์ชันบางส่วนขนาดเล็กด้วย bind และฟังก์ชันลูกศรห่อหุ้ม คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน
บทเรียน “ข้อควรระวังในการแยกเมธอดและการประยุกต์ฟังก์ชันบางส่วน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม
ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- this แบบเลกซิคัลกับแบบไดนามิก ทบทวนฟังก์ชันลูกศร
- ข้อควรระวังในการแยกเมธอดและการประยุกต์ฟังก์ชันบางส่วน
- ทางเลือกเชิงฟังก์ชัน — ส่งบริบท คลอเชอร์ และตัวช่วยขนาดเล็ก