ฉันขอแนะนำให้คุณอ่านบทความนี้ซึ่งฉันคิดว่าอธิบายได้ค่อนข้างดีว่าทำไมการขยายวัตถุเป็นความคิดที่ไม่ดีสำหรับ Prototype เช่นกัน
สรุป:
ขาดสเปค
การเปิดรับ "วัตถุต้นแบบ" ไม่ได้เป็นส่วนหนึ่งของข้อมูลจำเพาะใด ๆ [... ] เพื่อให้การใช้งานสอดคล้องกับ DOM ระดับ 2 อย่างสมบูรณ์ไม่จำเป็นต้องเปิดเผยโหนดโกลบอล, องค์ประกอบ, HTMLElement ฯลฯ เหล่านั้น
โฮสต์วัตถุไม่มีกฎ
วัตถุ DOM เป็นวัตถุโฮสต์ [... ] วัตถุโฮสต์อาจใช้วิธีการภายในเหล่านี้กับพฤติกรรมใด ๆ ที่ขึ้นอยู่กับการใช้งานหรืออาจเป็นไปได้ว่าวัตถุโฮสต์ใช้วิธีการภายในบางวิธีเท่านั้นและไม่ใช่วิธีอื่น
[... ] พฤติกรรมวิธีการภายในขึ้นอยู่กับการนำไปใช้งาน [... ] ตามคำนิยามคุณกำลังทำงานกับสิ่งที่ได้รับอนุญาตให้ทำงานในลักษณะที่คาดเดาไม่ได้และเอาแน่เอานอนไม่ได้
โอกาสเกิดการชน
ด้วยสภาพแวดล้อมที่มีการใช้งานจำนวนมากในปัจจุบันมันเป็นไปไม่ได้ที่จะบอกได้ว่าคุณสมบัติบางอย่างนั้นไม่ได้เป็นส่วนหนึ่งของ DOM [ ... ]
คุณสมบัติเงาของตัวควบคุมฟอร์มที่ตั้งชื่อทั้งหมดที่สืบทอดผ่านเชนลูกโซ่ต้นแบบ โอกาสในการชนและข้อผิดพลาดที่ไม่คาดคิดในองค์ประกอบแบบฟอร์มนั้นสูงขึ้น
การใช้กลยุทธ์การเติมคำล่วงหน้าบางประเภทสามารถบรรเทาปัญหาได้ แต่อาจทำให้มีเสียงรบกวนเพิ่มขึ้น
ประสิทธิภาพค่าใช้จ่าย
[... ] เบราว์เซอร์ที่ไม่รองรับส่วนขยายองค์ประกอบเช่น IE 6, 7, Safari 2.x เป็นต้นต้องใช้ส่วนขยายวัตถุด้วยตนเอง ปัญหาคือการขยายด้วยตนเองช้าไม่สะดวกและไม่ขยาย
[... ] เมื่อคุณเริ่มขยายองค์ประกอบไลบรารี API ส่วนใหญ่ต้องการกลับองค์ประกอบเพิ่มเติมทุกที่ ดังนั้นวิธีการสืบค้นเช่น $$ อาจสิ้นสุดการขยายองค์ประกอบทุกรายการในแบบสอบถาม
IE DOM เป็นระเบียบ
ดังที่แสดงในส่วนก่อนหน้าส่วนขยาย DOM แบบแมนนวลนั้นไม่เป็นระเบียบ แต่การขยาย DOM แบบแมนนวลใน IE นั้นยิ่งแย่ [... ]
โบนัส: ข้อบกพร่องของเบราว์เซอร์
for(var ... in ...)
ลูปจะเกิดความสับสนเนื่องจากฟังก์ชั่นต้นแบบถูกส่งผ่านเช่นกัน