เมื่อส่งผ่านอ็อบเจ็กต์เป็นพารามิเตอร์ JavaScript จะส่งผ่านอ็อบเจ็กต์โดยการอ้างอิงและทำให้ยากที่จะสร้างสำเนาโลคัลของอ็อบเจ็กต์
var o = {}; (function(x){ var obj = x; obj.foo = 'foo'; obj.bar = 'bar'; })(o)oจะมี.fooและ.bar.เป็นไปได้ที่จะหลีกเลี่ยงสิ่งนี้โดยการโคลน ตัวอย่างง่ายๆ:
var o = {}; function Clone(x) { for(p in x) this[p] = (typeof(x[p]) == 'object')? new Clone(x[p]) : x[p]; } (function(x){ var obj = new Clone(x); obj.foo = 'foo'; obj.bar = 'bar'; })(o)oจะไม่มี.fooหรือ.bar.
คำถาม
- มีวิธีที่ดีกว่าในการส่งผ่านวัตถุด้วยค่านอกเหนือจากการสร้างสำเนา / โคลนในเครื่องหรือไม่