ในกรณีของคุณ C.prototype
และ a[[prototype]]
กำลังอ้างอิงวัตถุเดียวกันในตอนแรก จากนั้นคุณเปลี่ยน C.prototype
เป็นวัตถุอื่นโดยสิ้นเชิง (ในหน่วยความจำ ) แต่การอ้างอิงของ a[[prototype]]
ยังคงชี้ไปที่วัตถุเก่า
ดังนั้นคุณกำลังคิดว่าคุณได้กลายพันธุ์วัตถุเดียวกัน แต่ในความเป็นจริงคุณเพิ่งสร้างข้อมูลอ้างอิงใหม่ทั้งหมดโดยการทำงานที่ได้รับมอบหมายใหม่
หากต้องการให้ชี้ไปที่วัตถุเดียวกันในหน่วยความจำ ให้ทำดังต่อไปนี้:
Object.setPrototypeOf(a, C.prototype); // thats like a[[prototype]] = C.prototype