การรวมออบเจกต์ด้วย Object.assign() แบบไม่เปลี่ยนต้นฉบับ
Object.assign() คัดลอก property จาก source ไป target โดย target แรกคือออบเจกต์ว่าง {} จะได้ออบเจกต์ใหม่ ไม่กระทบต้นทาง
ตัวอย่างโค้ด
var firstObject = { name: 'John' };
var secondObject = { name: 'Carol' };
console.log("ก่อนรวม = ");
console.log(firstObject); // { name: 'John' }
// รวม: target={}, source1=firstObject, source2=secondObject
var afterMerging = Object.assign({}, firstObject, secondObject);
afterMerging.name = 'Smith'; // เปลี่ยนค่าในออบเจกต์ใหม่
console.log("หลังรวม = ");
console.log(firstObject); // { name: 'John' } - ไม่เปลี่ยน!
console.log(afterMerging); // { name: 'Smith' }
วิธีรัน
node fileName.js
ผลลัพธ์
ก่อนรวม = { name: 'John' }
หลังรวม = { name: 'John' }
คำอธิบาย
Object.assign(target, ...sources)คัดลอก property ตามลำดับ source ทับซ้อนกัน- ส่ง
{}เป็น target แรก → สร้างออบเจกต์ใหม่ ไม่ mutate ต้นทาง - เป็น Shallow Copy: nested object ยังอ้างอิงเดิมอยู่
วิธีทันสมัย: Spread Operator
const merged = { ...firstObject, ...secondObject };
merged.name = 'Smith';
console.log(firstObject); // { name: 'John' } - ไม่เปลี่ยน