การเพิ่มพฤติกรรมให้กับคลาส ActionScript 3 ที่ไม่ใช่แบบไดนามิก

เมื่อทำงานกับ ActionScript 3 คุณอาจจะพบสถานการณ์ที่คุณต้องการขยายฟังก์ชันการทำงานของคลาสที่มีอยู่ โดยเฉพาะคลาสที่สร้างจาก WSDL ซึ่งมีลักษณะเป็นคลาสที่ไม่ใช่แบบไดนามิก โดยความท้าทายอยู่ที่คุณต้องการเพิ่มเมธอดใหม่โดยไม่ต้องเปลี่ยนแปลงโค้ดที่สร้างอัตโนมัติหรือพึ่งพาการสืบทอด ในโพสต์บล็อกนี้เราจะสำรวจวิธีการที่มีประสิทธิภาพในการทำเช่นนี้

ทำความเข้าใจกับปัญหา

เป้าหมายของคุณคือการเพิ่มเมธอดใหม่ให้กับคลาสที่ไม่ใช่แบบไดนามิกซึ่งสร้างจาก WSDL เนื่องจากคลาสของคุณไม่ใช่แบบไดนามิก ทำให้คุณไม่สามารถขยายคลาสนี้โดยใช้เทคนิคการสืบทอดแบบปกติได้ ตัวอย่างเช่น ความคิดเริ่มต้นของคุณคือการทำอะไรบางอย่างเช่นนี้:

FooClass.prototype.method = function():String
{
    return "Something";
}

อย่างไรก็ตาม เนื่องจากคลาสนี้ไม่ใช่แบบไดนามิก วิธีการข้างต้นจะไม่สามารถใช้งานได้ คุณต้องค้นหาวิธีการเพิ่มเติมในการเพิ่มพฤติกรรมให้แบบไดนามิก ซึ่งคล้ายกับ Extension Methods ใน C# 3 แต่ภายในข constraints ของ ActionScript 3

โซลูชัน: การเข้าถึงโปรโตไทป์

น่าสนใจที่คุณยังสามารถขยายฟังก์ชันการทำงานโดยใช้โปรโตไทป์ในขณะที่ทำงานกับคลาสที่ไม่ใช่แบบไดนามิกใน ActionScript 3 นี่คือวิธีการทำ:

คู่มือแบบเป็นขั้นตอน

  1. กำหนดเมธอดใหม่: แทนที่จะแนบเมธอดโดยตรงเข้ากับโปรโตไทป์ คุณสามารถตั้งค่าเมธอดให้อยู่บนอ็อบเจ็กต์ของคุณแบบไดนามิกโดยใช้โครงสร้างวงเล็บ

  2. นำไปใช้: ใช้โครงสร้างวงเล็บเพื่อเรียกใช้เมธอดบนอินสแตนซ์ของคลาสของคุณ นี่คือวิธีการนำไปใช้:

    แทนที่:

    foo.method();
    

    ด้วย:

    foo["method"]();
    
  3. บทสรุป: โดยการเข้าถึงเมธอดผ่านโครงสร้างวงเล็บ ActionScript 3 จะช่วยให้คุณสามารถข้ามข้อจำกัดบางอย่างของคลาสที่ไม่ใช่แบบไดนามิก และทำให้คุณสามารถใช้เมธอดใหม่ได้ตามต้องการ

ตัวอย่างโค้ด

นี่คือตัวอย่างสั้น ๆ ที่แสดงวิธีการแก้ปัญหานี้ในทางปฏิบัติ:

// สมมติว่า FooClass ถูกกำหนดและเป็นคลาสที่ไม่ใช่แบบไดนามิก
var foo:FooClass = new FooClass();
foo["method"] = function():String {
    return "Something";
};

trace(foo["method"]());  // ผลลัพธ์: Something

สรุป

โดยสรุป ขณะที่คลาส ActionScript 3 ที่ไม่ใช่แบบไดนามิกจำกัดความสามารถในการเพิ่มเมธอดผ่านการสืบทอดจากโปรโตไทป์ แต่คุณสามารถนำไปใช้พฤติกรรมได้สำเร็จโดยการเข้าถึงเมธอดโดยใช้โครงสร้างวงเล็บ วิธีการนี้ทำงานได้มีประสิทธิภาพโดยไม่จำเป็นต้องเปลี่ยนแปลงโครงสร้างโค้ดต้นฉบับ ทำให้คลาสที่สร้างขึ้นยังคงอยู่

วิธีการนี้ไม่เพียงแต่เพิ่มความยืดหยุ่นในการเขียนโค้ด แต่ยังสอดคล้องกับการปฏิบัติโดยทั่วไปจากภาษาการเขียนโปรแกรมอื่น ๆ เช่น C# ลงมือทดลองต่อไปแล้วคุณจะค้นพบวิธีการขยายฟังก์ชันการทำงานใน ActionScript 3 โดยไม่มีข้อจำกัดแบบดั้งเดิม