เมื่อ JavaScript เรียก COM เพื่อส่งผ่านอาร์เรย์ อินเทอร์เฟซ COM ได้รับวัตถุชนิด VARIANT เช่นอาร์เรย์ ชนิด vt ของวัตถุนี้คือ VT_DISPATCH ดังนั้นค่าของวัตถุจึงแสดงถึงตัวชี้ชนิด IDispatch
ตัวชี้ประเภท IDispatch ระบุว่าจริงๆ แล้ววัตถุอาร์เรย์นั้นเป็นวัตถุอาร์เรย์ในตัวของ JavaScript ในด้าน JavaScript เราสามารถรับขนาดของอาร์เรย์ผ่านแอตทริบิวต์ความยาวได้ จากนั้นที่นี่ เราสามารถรับอาร์เรย์ผ่าน GetIDsOfNames ฟังก์ชันและฟังก์ชันเรียกใช้เพื่อให้เนื้อหาของอาร์เรย์สามารถเปลี่ยนแปลงได้แบบไดนามิก
ต่อไปนี้เป็นเนื้อหาที่ยกมา: // รับความยาวของอาร์เรย์ - |
ในขณะนี้ nLength ได้รับความยาวของอาร์เรย์
อาร์เรย์ใน JavaScript เป็นวัตถุ และเนื้อหาของอาร์เรย์เป็นคุณลักษณะของวัตถุ ซึ่งถูกสร้างขึ้นแบบไดนามิก ความแตกต่างที่สำคัญคือความแตกต่างในชื่อ ชื่อของแอตทริบิวต์ของวัตถุองค์ประกอบในอาร์เรย์ถูกสร้างขึ้นแบบไดนามิกนั่นคือสามารถรับได้ผ่านการสมัครสมาชิก ดังนั้นที่นี่สามารถรับชื่อแอตทริบิวต์ผ่านการสมัครสมาชิกได้เช่นกัน ดังต่อไปนี้:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: สำหรับ ( int i = 0 ; i < nLength; ++ i) |
ดังนั้น โดยการเรียกวิธีการแอตทริบิวต์ทั้งสองนี้ วัตถุอาร์เรย์ JavaScript ทั้งหมดสามารถอำนวยความสะดวกในส่วนติดต่อ COM
ประโยชน์ของสิ่งนี้คืออะไร เมื่อดูแหล่งข้อมูลออนไลน์จำนวนมาก ฉันพบว่าส่วนใหญ่ใช้ SAFEARRAY เพื่อประมวลผลโครงสร้างและส่งผ่านไปยังอินเทอร์เฟซ COM อย่างไรก็ตาม MIDL ไม่รองรับ SAFEARRAY และวัตถุ JavaScript เองก็ไม่รองรับ สำหรับเนื้อหานี้ หากต้องการทำงานในโหมด SAFEARRAY คุณจะต้องสลับระหว่าง VBScript และ JavaScript ซึ่งจะทำให้การเขียนโปรแกรมลำบากและทำให้เจ้าหน้าที่บำรุงรักษาสับสน
ใช้ JavaScript โดยตรงเพื่อส่งผ่านในอาร์เรย์และรวมอาร์เรย์ด้วยวิธีใดก็ตาม ไม่จำเป็นต้องรวมโครงสร้างผ่านวิธี SAFEARRAY ในเวลาเดียวกัน เนื่องจากทุกออบเจ็กต์ (องค์ประกอบ) ใน JavaScript มีข้อมูลประเภทของตัวเอง อาร์เรย์ใน JavaScript จึงเป็นทางเลือกที่ดีที่สุด (วิธีถ่ายโอน) สำหรับโครงสร้างใน C