แต่ก็ไม่ได้สนใจอะไร เพราะนึกไม่ออกว่ามันจะ conflict กันตรงไหน
(ตอนแรกนึกว่าเป็นเรื่อง name conflict)
วันนี้อ่านเจอ case ตัวอย่างใน How Prototype Can Break Your Site
ของ code_poet
เขายกตัวอย่างง่ายๆว่า
var a = new Array();
a[0] = 1;
a[1] = 2;
for (var i in a) {
print(i + " = "+ a[i]);
}
code ข้างบนก็ดูเรียบๆตรงไปตรงมา ไม่น่าผิดปกติตรงไหน
แต่ถ้าเมื่อไรก็ตามที่เรา include Prototype เข้ามา
code ข้างบนจะทำงานผิดไปจากเดิม
โดยผลลัพท์ที่ได้จะหน้าตาแบบนี้แทน
0 = 1
1 = 2
each = function() { }
iterate = function() { }
สาเหตุเป็นเพราะ
- Prototype มีการ extends Array class ของ javascript
เพื่อเพิ่ม feature เกี่ยวกับการ iterate - loop code ใช้วิธี loop array แบบพิสดารไปหน่อย
คือแทนที่จะใช้for (var i = 0; i < a.length; i++)
กลับไปใช้for (var i in a)
แทน