ฉันควรใช้ Monkey Patching ใน JavaScript หรือไม่?

Monkey Patching แสดงให้เห็นถึงความยืดหยุ่นของ JavaScript รวมถึงอันตรายบางประการ

ภาพถ่ายจาก Jamie Haughton จาก Unsplash ภาพประกอบโดย David Fekke

Monkey Patching เป็นความสามารถใน JavaScript ในการสลับฟังก์ชันในออบเจ็กต์ JavaScript กับฟังก์ชันของคุณเอง สิ่งนี้อาจมีประโยชน์ แต่ก็เป็นอันตรายได้เช่นกัน จุดแข็งอย่างหนึ่งของ JavaScript คือความสามารถในการเปลี่ยนแปลงออบเจ็กต์และโมดูลได้อย่างง่ายดาย นอกจากนี้ยังทำให้ง่ายต่อการแนะนำจุดบกพร่องใหม่ ๆ

ฟังก์ชันประเภทนี้สามารถพบได้ในภาษาต่างๆเช่น Objective-C และ Swift ซึ่งนักพัฒนาสามารถเปลี่ยนฟังก์ชันการทำงานของเมธอดในคลาสของตนได้โดยใช้คุณสมบัติรันไทม์ที่เรียกว่า 'Method Swizzling'

เพื่อแสดงให้เห็นถึงการทำงานนี้เราสามารถสร้างวัตถุที่มีฟังก์ชันเพิ่มอย่างง่าย

จากนั้นเราสามารถสร้างอินสแตนซ์วัตถุนี้และเรียกใช้addฟังก์ชันบนวัตถุของเรา

const MathObject = new SimpleMathObject();
const result = MathObject.add(1, 2);
console.log(`Result of 1 + 2 = ${result}`);
// Output: Result of 1 + 2 = 3

ในการเพิ่ม Monkey Patch ให้กับวัตถุของเราเราต้องกำหนดฟังก์ชันใหม่ให้กับaddฟังก์ชันบนวัตถุที่สร้างอินสแตนซ์ของเรา เราจะต้องได้รับการอ้างอิงถึงฟังก์ชันเดิมเพื่อที่เราจะสามารถใช้งานได้ในฟังก์ชันใหม่ของเราต่อไปหรืออาจกำหนดให้กลับไปที่วัตถุอีกครั้งเมื่อเราทำการแพตช์เสร็จแล้ว

ตอนนี้เราสามารถเพิ่มaddฟังก์ชันเวอร์ชันของเราเองได้โดยไม่ต้องเปลี่ยนเวอร์ชันดั้งเดิมของไฟล์SimpleMathObject. สิ่งนี้จะมีประโยชน์หากเราจำเป็นต้องใส่ฟังก์ชันใหม่บางอย่างลงในออบเจ็กต์นี้

ปัญหาอย่างหนึ่งในการใช้class คีย์เวิร์ดหรือต้นแบบออบเจ็กต์คือการปล่อยให้ออบเจ็กต์ของคุณเปิดกว้างสำหรับการจัดการประเภทนี้ หากคุณไม่ต้องการให้ฟังก์ชันของคุณเป็น Monkey Patched มีวิธีป้องกันไม่ให้การดำเนินการประเภทนั้นเกิดขึ้นในโค้ดของคุณ วิธีหนึ่งในการดำเนินการนี้คือการใช้ฟังก์ชันจากโรงงานและObject.freezeเมื่อส่งคืนวัตถุของคุณ

ตอนนี้ถ้าคุณพยายามแทนที่addฟังก์ชันด้วยฟังก์ชันของคุณเองเช่นในตัวอย่างด้านล่างเอ็นจิ้น JavaScript จะส่ง TypeError

ข้อผิดพลาดจากการพยายามรันโค้ดนี้ควรมีลักษณะคล้ายกับข้อผิดพลาดต่อไปนี้

TypeError: Cannot assign to read only property 'add' of object '#<Object>' at file:///Users/davidfekke/Documents/monkeypatch/monkey.js:39:23

Monkey Patching เป็นแนวคิดที่ทรงพลังมากใน JavaScript คุณสามารถใช้เพื่อเพิ่มแง่มุมหรือฉีดฟังก์ชันการทำงานใหม่ลงในไลบรารีหรือโมดูลที่มีอยู่ นอกจากนี้ยังอาจเป็นอันตรายได้ แต่ถ้าคุณไม่ต้องการให้โค้ดของคุณเป็น Monkey Patched คุณสามารถใช้ Object.freeze เพื่อทำให้ออบเจ็กต์ของคุณอ่านได้อย่างเดียว

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

แต่เดิมการเผยแพร่ที่https://fek.io

เนื้อหาเพิ่มเติมที่plainenglish.io

Suggested posts

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

ตัดตอนมาจาก Small, Sharp Software Tools โดย Brian P. Hogan

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้

ฉันย้ายจากคณิตศาสตร์เป็น CS ได้อย่างไร

ฉันย้ายจากคณิตศาสตร์เป็น CS ได้อย่างไร

กระบวนการรับเข้าเรียนในฤดูใบไม้ร่วงปี 2023 กำลังจะสิ้นสุดลง และการเลื่อนเวลา/การปฏิเสธกำลังเกิดขึ้น ขอแสดงความยินดีหากคุณได้รับการตอบรับเข้าสู่โปรแกรมในฝันของคุณที่ UW

Related posts

อะไรทำให้พอดคาสต์มีอิทธิพล?

อะไรทำให้พอดคาสต์มีอิทธิพล?

เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์

การปฏิวัติสถานที่ทำงาน: ผู้เชี่ยวชาญชั้นนำพูดคุยเกี่ยวกับการทำงานแบบผสมผสานและการทำงานระยะไกล

การปฏิวัติสถานที่ทำงาน: ผู้เชี่ยวชาญชั้นนำพูดคุยเกี่ยวกับการทำงานแบบผสมผสานและการทำงานระยะไกล

ในภูมิทัศน์ทางธุรกิจที่มีการพัฒนาอย่างรวดเร็วในปัจจุบัน แนวคิดของการทำงานแบบผสมผสานและการทำงานระยะไกลได้รับแรงผลักดันอย่างที่ไม่เคยมีมาก่อน ในขณะที่บริษัทต่าง ๆ ยังคงปรับตัวให้เข้ากับความต้องการและความคาดหวังที่เปลี่ยนแปลงไปของพนักงาน ผู้เชี่ยวชาญจากหลากหลายสาขาได้มารวมตัวกันเพื่อหารือเกี่ยวกับประโยชน์ ความท้าทาย และอนาคตของวิธีการทำงานที่เปลี่ยนแปลงนี้

ชีวิตไร้ขีดจำกัด

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

คาวบอยโกหก

บรรษัทขนาดใหญ่ขายคนอเมริกันด้วยความเท็จได้อย่างไร

คาวบอยโกหก

เช้าวันนี้เป็นสีทองอร่ามบนเนินเขาทางทิศตะวันตก เมื่อแสงแรกของแสงแดดส่องให้เห็นหญ้าที่ปกคลุมด้วยน้ำค้างแข็งบนที่ราบ ฝูงวัวแองกัสที่สงบนิ่ง ตัวสีดำสนิทและตัวมหึมา มีเงาสะท้อนยามพระอาทิตย์ขึ้นขณะที่พวกมันเดินไปตามทางที่ไม่ค่อยมีใครรู้จักไปยังสถานที่ที่พวกเขารู้จักดี บาร์อาหารเช้า