การเพิ่มพฤติกรรมให้กับคลาส ActionScript 3 ที่ไม่ใช่แบบไดนามิก
เมื่อทำงานกับ ActionScript 3 คุณอาจจะพบสถานการณ์ที่คุณต้องการขยายฟังก์ชันการทำงานของคลาสที่มีอยู่ โดยเฉพาะคลาสที่สร้างจาก WSDL ซึ่งมีลักษณะเป็นคลาสที่ไม่ใช่แบบไดนามิก โดยความท้าทายอยู่ที่คุณต้องการเพิ่มเมธอดใหม่โดยไม่ต้องเปลี่ยนแปลงโค้ดที่สร้างอัตโนมัติหรือพึ่งพาการสืบทอด ในโพสต์บล็อกนี้เราจะสำรวจวิธีการที่มีประสิทธิภาพในการทำเช่นนี้
ทำความเข้าใจกับปัญหา
เป้าหมายของคุณคือการเพิ่มเมธอดใหม่ให้กับคลาสที่ไม่ใช่แบบไดนามิกซึ่งสร้างจาก WSDL เนื่องจากคลาสของคุณไม่ใช่แบบไดนามิก ทำให้คุณไม่สามารถขยายคลาสนี้โดยใช้เทคนิคการสืบทอดแบบปกติได้ ตัวอย่างเช่น ความคิดเริ่มต้นของคุณคือการทำอะไรบางอย่างเช่นนี้:
FooClass.prototype.method = function():String
{
return "Something";
}
อย่างไรก็ตาม เนื่องจากคลาสนี้ไม่ใช่แบบไดนามิก วิธีการข้างต้นจะไม่สามารถใช้งานได้ คุณต้องค้นหาวิธีการเพิ่มเติมในการเพิ่มพฤติกรรมให้แบบไดนามิก ซึ่งคล้ายกับ Extension Methods ใน C# 3 แต่ภายในข constraints ของ ActionScript 3
โซลูชัน: การเข้าถึงโปรโตไทป์
น่าสนใจที่คุณยังสามารถขยายฟังก์ชันการทำงานโดยใช้โปรโตไทป์ในขณะที่ทำงานกับคลาสที่ไม่ใช่แบบไดนามิกใน ActionScript 3 นี่คือวิธีการทำ:
คู่มือแบบเป็นขั้นตอน
-
กำหนดเมธอดใหม่: แทนที่จะแนบเมธอดโดยตรงเข้ากับโปรโตไทป์ คุณสามารถตั้งค่าเมธอดให้อยู่บนอ็อบเจ็กต์ของคุณแบบไดนามิกโดยใช้โครงสร้างวงเล็บ
-
นำไปใช้: ใช้โครงสร้างวงเล็บเพื่อเรียกใช้เมธอดบนอินสแตนซ์ของคลาสของคุณ นี่คือวิธีการนำไปใช้:
แทนที่:
foo.method();
ด้วย:
foo["method"]();
-
บทสรุป: โดยการเข้าถึงเมธอดผ่านโครงสร้างวงเล็บ ActionScript 3 จะช่วยให้คุณสามารถข้ามข้อจำกัดบางอย่างของคลาสที่ไม่ใช่แบบไดนามิก และทำให้คุณสามารถใช้เมธอดใหม่ได้ตามต้องการ
ตัวอย่างโค้ด
นี่คือตัวอย่างสั้น ๆ ที่แสดงวิธีการแก้ปัญหานี้ในทางปฏิบัติ:
// สมมติว่า FooClass ถูกกำหนดและเป็นคลาสที่ไม่ใช่แบบไดนามิก
var foo:FooClass = new FooClass();
foo["method"] = function():String {
return "Something";
};
trace(foo["method"]()); // ผลลัพธ์: Something
สรุป
โดยสรุป ขณะที่คลาส ActionScript 3 ที่ไม่ใช่แบบไดนามิกจำกัดความสามารถในการเพิ่มเมธอดผ่านการสืบทอดจากโปรโตไทป์ แต่คุณสามารถนำไปใช้พฤติกรรมได้สำเร็จโดยการเข้าถึงเมธอดโดยใช้โครงสร้างวงเล็บ วิธีการนี้ทำงานได้มีประสิทธิภาพโดยไม่จำเป็นต้องเปลี่ยนแปลงโครงสร้างโค้ดต้นฉบับ ทำให้คลาสที่สร้างขึ้นยังคงอยู่
วิธีการนี้ไม่เพียงแต่เพิ่มความยืดหยุ่นในการเขียนโค้ด แต่ยังสอดคล้องกับการปฏิบัติโดยทั่วไปจากภาษาการเขียนโปรแกรมอื่น ๆ เช่น C# ลงมือทดลองต่อไปแล้วคุณจะค้นพบวิธีการขยายฟังก์ชันการทำงานใน ActionScript 3 โดยไม่มีข้อจำกัดแบบดั้งเดิม