JavaScript ไม่รองรับ Function Overloading แบบดั้งเดิม (หลายฟังก์ชันชื่อเดียวกัน แตกต่างพารามิเตอร์) หากประกาศฟังก์ชันชื่อซ้ำ ตัวหลังจะทับตัวก่อน
ตัวอย่างที่ไม่ทำงาน
function funcONE(x, y) { return x * y; }
function funcONE(z) { return z; }
// เรียกใช้
funcONE(5); // 5 (เรียกตัวที่ 2)
funcONE(5, 6); // 5 (ยังคงเรียกตัวที่ 2! ไม่ได้คูณ)
JavaScript ดูแค่ชื่อฟังก์ชัน ไม่ดู Signature (จำนวน/ชนิดพารามิเตอร์)
วิธีจำลอง Overloading (Pattern ทั่วไป)
1. ตรวจสอบ arguments.length / typeof
function funcONE(a, b) {
if (b === undefined) {
return a; // 1 argument
}
return a * b; // 2 arguments
}
funcONE(5); // 5
funcONE(5, 6); // 30
2. ใช้ Rest Parameters + Logic
function funcONE(...args) {
if (args.length === 1) return args[0];
if (args.length === 2) return args[0] * args[1];
throw new Error("Invalid arguments");
}
3. ใช้ Object Parameter (Options Object)
function funcONE(options) {
const { x, y, z } = options;
if (y !== undefined) return x * y;
if (z !== undefined) return z;
return x;
}
funcONE({ x: 5 }); // 5
funcONE({ x: 5, y: 6 }); // 30
funcONE({ z: 10 }); // 10
4. Default Parameters (ES6)
function funcONE(x, y = null) {
return y !== null ? x * y : x;
}
สรุป: JavaScript ใช้ "Single Function + Logic ภายใน" แทน Overloading จริง วิธี Options Object อ่านง่ายและขยายง่ายที่สุด