คำจำกัดความของฟังก์ชั่น JS สามารถระบุชื่อพารามิเตอร์ที่เป็นทางการ พารามิเตอร์นี้คล้ายกับอาร์เรย์ วิธี. กล่าวอีกนัยหนึ่งฟังก์ชั่นทั้งหมดของ JS รองรับพารามิเตอร์ที่ไม่มีที่สิ้นสุดและชนิดข้อมูลเป็นประเภทที่อ่อนแอดังนั้นจึงไม่มีวิธีการที่แตกต่างระหว่างฟังก์ชั่น JS ยกเว้นชื่อหรือไม่?
มีวิธีเสมอเราสามารถใช้อาร์กิวเมนต์วัตถุพิเศษใน JavaScript เพื่อจำลองฟังก์ชั่นโอเวอร์โหลด ใช้เพื่อกำหนดจำนวนหรือประเภทของพารามิเตอร์ขาเข้าเพื่อแยกความแตกต่างของการโอเวอร์โหลด
1. โหลดซ้ำตามจำนวนพารามิเตอร์
JS เพื่อกำหนดจำนวนพารามิเตอร์ที่เข้ามาสามารถตัดสินได้โดยอาร์กิวเมนต์แอตทริบิวต์ความยาว
การคัดลอกรหัสมีดังนี้:
<script type = "text/javascript">
ฟังก์ชั่นเพิ่ม () {
if (arguments.length == 1) {
การแจ้งเตือน (อาร์กิวเมนต์ [0] + 10);
-
อื่นถ้า (arguments.length == 2) {
การแจ้งเตือน (อาร์กิวเมนต์ [0] + อาร์กิวเมนต์ [1]);
-
-
// ฟังก์ชั่นโทร
เพิ่ม (10);
เพิ่ม (10, 20);
</script>
2. โหลดใหม่ตามประเภทพารามิเตอร์
มี 3 วิธีในการตัดสินประเภทตัวแปร:
1. ใช้คำสั่ง typeof เพื่อตัดสินประเภทตัวแปรและคำสั่ง typeof ส่งคืนสตริงที่สอดคล้องกับประเภท
2. ใช้คำสั่งอินสแตนซ์ของการตัดสินประเภทตัวแปรและคำสั่งอินสแตนซ์ของการส่งคืนจริง/เท็จ
3. ใช้แอตทริบิวต์ตัวสร้างเพื่อกำหนดประเภทตัวแปรซึ่งส่งคืนการอ้างอิงตัวสร้างที่ใช้ในการสร้างตัวแปร
ตารางเปรียบเทียบ: จะเห็นได้ว่าการใช้ typeof ไม่สามารถกำหนดประเภทเฉพาะได้อย่างถูกต้องดังนั้นเราจึงใช้ตัวสร้างเพื่อทำการตัดสิน
ประเภทของ | สาย | ตัวเลข | วัตถุ | การทำงาน | บูลีน | วัตถุ | วัตถุ |
ตัวสร้าง | สาย | ตัวเลข | วัตถุ | การทำงาน | บูลีน | อาร์เรย์ | ผู้ใช้กำหนด |
การคัดลอกรหัสมีดังนี้:
<script type = "text/javascript">
ฟังก์ชั่นเพิ่ม ()
-
if (arguments.length == 0) return 0;
var sum = 0;
สำหรับ (var i = 0; i <arguments.length; i ++) {
if (อาร์กิวเมนต์ [i] .constructor == number) {
// หรือเปลี่ยนเป็น: ถ้า (อาร์กิวเมนต์ [i] หมายเลขอินสแตนซ์)
// หรือเปลี่ยนเป็น: ถ้า (typeof (อาร์กิวเมนต์ [i]) == "number")
sum += อาร์กิวเมนต์ [i];
-
-
ผลรวมกลับ;
-
// ฟังก์ชั่นโทร
การแจ้งเตือน (เพิ่ม (10));
การแจ้งเตือน (เพิ่ม (10,20));
</script>