อาร์กิวเมนต์วัตถุ
ในรหัสฟังก์ชันมีการใช้อาร์กิวเมนต์วัตถุพิเศษนักพัฒนาสามารถเข้าถึงได้โดยไม่ต้องชี้ชื่อพารามิเตอร์อย่างชัดเจน
ตัวอย่างเช่นในฟังก์ชั่น sayshi () พารามิเตอร์แรกคือข้อความ ค่านี้ยังสามารถเข้าถึงได้ด้วยอาร์กิวเมนต์ [0] นั่นคือค่าของพารามิเตอร์แรก (พารามิเตอร์แรกอยู่ที่ตำแหน่ง 0 พารามิเตอร์ที่สองอยู่ที่ตำแหน่ง 1 และอื่น ๆ )
ดังนั้นคุณสามารถแทนที่ฟังก์ชั่นโดยไม่ต้องตั้งชื่อพารามิเตอร์อย่างชัดเจน:
ฟังก์ชั่น sayshi () {ถ้า (อาร์กิวเมนต์ [0] == "ลาก่อน") {return;}} การแจ้งเตือน (อาร์กิวเมนต์ [0]);}จำนวนพารามิเตอร์การตรวจจับ
นอกจากนี้คุณยังสามารถใช้วัตถุอาร์กิวเมนต์เพื่อตรวจจับจำนวนพารามิเตอร์ของฟังก์ชันและอ้างอิงถึงอาร์กิวเมนต์แอตทริบิวต์ความยาว
รหัสต่อไปนี้จะส่งออกจำนวนพารามิเตอร์ที่ใช้สำหรับการโทรแต่ละครั้งไปยังฟังก์ชัน:
ฟังก์ชั่น HOWMANYARGS () {Alert (Arguments.Length);} HOWMANYARGS ("String", 45); HOWMANYARGS (); HOWMANYARGS (12);รหัสด้านบนจะแสดง "2", "0" และ "1" ในทางกลับกัน
หมายเหตุ: แตกต่างจากภาษาการเขียนโปรแกรมอื่น ๆ ECMASCript ไม่ได้ตรวจสอบว่าจำนวนพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชันเท่ากับจำนวนพารามิเตอร์ที่กำหนดโดยฟังก์ชัน ฟังก์ชั่นที่กำหนดโดยนักพัฒนาสามารถยอมรับพารามิเตอร์จำนวนใดก็ได้ (ตามเอกสารของ NetScape สูงถึง 255) โดยไม่ต้องโยนข้อผิดพลาดใด ๆ พารามิเตอร์ที่ขาดหายไปใด ๆ จะถูกส่งผ่านไปยังฟังก์ชันตามที่ไม่ได้กำหนดและฟังก์ชันซ้ำซ้อนจะถูกละเว้น
จำลองฟังก์ชั่นมากเกินไป
ใช้วัตถุอาร์กิวเมนต์เพื่อกำหนดจำนวนพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชั่นจากนั้นจำลองฟังก์ชั่นการโอเวอร์โหลด:
ฟังก์ชั่น doadd () {ถ้า (arguments.length == 1) {แจ้งเตือน (อาร์กิวเมนต์ [0] + 5);} อื่นถ้า (arguments.length == 2) {Alert (อาร์กิวเมนต์ [0] + อาร์กิวเมนต์ [1]);}}}doadd (10); // เอาต์พุต "15"
Doadd (40, 20); // เอาต์พุต "60"
เมื่อมีพารามิเตอร์เดียวฟังก์ชัน doadd () จะเพิ่ม 5 ลงในพารามิเตอร์ หากมีสองพารามิเตอร์พารามิเตอร์ทั้งสองจะถูกเพิ่มเพื่อส่งคืนผลรวมของพวกเขา ดังนั้น doadd (10) ส่งออก "15" ในขณะที่ doadd (40, 20) ส่งออก "60"
แม้ว่าจะไม่ดีเท่าการโอเวอร์โหลด แต่ก็เพียงพอที่จะหลีกเลี่ยงข้อ จำกัด ของ ecmascript นี้