จาวาสคริปต์มีคลาสอ็อบเจ็กต์ที่มีเมธอดทุกประเภทที่เราสามารถใช้จัดการอ็อบเจ็กต์เหล่านั้นได้ ในบทความนี้ เราจะมาดูเมธอด Object.assign() และสาธิตวิธีใช้งาน
เบื้องหลังเล็กน้อย
เพื่อเป็นการเตือนความจำ วัตถุเป็นชนิดข้อมูลใน JavaScript ซึ่งคล้ายกับพจนานุกรมใน Python ที่มีสิ่งที่เราเรียกว่าคู่ของคีย์:ค่า สมมุติว่าเรามีวัตถุ เรียกมันว่าแฮร์รี่ อาจมีคู่คีย์:ค่าที่มีลักษณะดังนี้:
let Harry = {
firstName: 'Harry',
lastName: 'Potter',
age: 11,
house: 'Gryffindor',
pet: {
name: 'Hedwig',
animal: 'owl'
}
}; กฎพื้นฐานของธีมในสถานการณ์นี้คือชื่อคุณสมบัติทางด้านซ้ายของโคลอนเป็นกุญแจสำคัญ และสิ่งที่อยู่ทางขวาคือค่า คีย์และค่าส่วนใหญ่ค่อนข้างตรงไปตรงมา – สิ่งเดียวที่อาจดูน่าเบื่อคือคุณสมบัติสุดท้าย:สัตว์เลี้ยง สัตว์เลี้ยงยังคงเป็นกุญแจสำคัญในกรณีนี้ อย่างไรก็ตาม ค่านั้นเป็นอ็อบเจ็กต์ที่มีคู่คีย์:ค่าอีกสองคู่ นี่คือสิ่งที่เราเรียกว่าวัตถุที่ซ้อนกัน
Object.assign(target, …sourceObjs);
มีเมธอด Object ชื่อ assign() ที่สามารถใช้เพื่อนำออบเจ็กต์ต้นทางหนึ่งออบเจ็กต์ขึ้นไปและคัดลอกไปยังออบเจกต์เป้าหมาย ไปดูโค้ดกันเลยดีกว่า:
let hpChar = {
firstName: 'Harry',
lastName: 'Potter',
age: 11,
house: 'Gryffindor',
pet: {
name: 'Hedwig',
animal: 'owl'
}
}
Object.assign({}, hpChar);
console.log(hpChar, '\n');
Object.assign(hpChar, {
firstName: 'Hermione',
lastName: 'Grainger',
pet: {
name: 'Crookshanks',
animal: 'cat'
}
}
);
console.log(hpChar)
มาดูโค้ดกัน เราเริ่มต้นด้วยวัตถุที่เรียกว่า hpChar hpChar นี้มีชื่อ นามสกุล อายุ บ้าน และทรัพย์สินของสัตว์เลี้ยง ทรัพย์สินสัตว์เลี้ยงนั้นเป็นวัตถุและมีคีย์และค่าบางอย่างในตัวเอง
ต่อไป เรามีตัวอย่างวิธีการแรกของเราที่เราจะพูดถึง Object.assign รับพารามิเตอร์ตั้งแต่สองตัวขึ้นไป อันแรก เสมอ วัตถุเป้าหมายที่คุณต้องการกำหนดค่าให้ ในกรณีนี้ มันคือวัตถุที่ว่างเปล่า
พารามิเตอร์ที่สองคือวัตถุของเราที่กำหนดไว้ข้างต้น นี่คือแหล่งข้อมูลที่เราจะนำไปใช้เพื่อกำหนดให้กับวัตถุเป้าหมาย (พารามิเตอร์แรกของเรา)
บรรทัดต่อไปนี้บันทึกผลลัพธ์ลงในคอนโซล:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
{ firstName: 'Harry',
lastName: 'Potter',
age: 11,
house: 'Gryffindor',
pet: { name: 'Hedwig', animal: 'owl' } }
ไม่มีอะไรแตกต่างกันมากใช่มั้ย? นั่นเป็นเพราะเรากำหนด hpChar ให้กับวัตถุว่าง - เราทำการโคลนวัตถุเป็นหลัก เกิดอะไรขึ้นถ้าเราทำอีกครั้ง แต่เปลี่ยนค่าบางอย่าง? คราวนี้เรามาแทนที่วัตถุว่างด้วยวัตถุ hpChar แทน - นี่จะเป็นเป้าหมายของเราในครั้งนี้ มาเปลี่ยนค่าบางค่าในพารามิเตอร์ที่สองกัน รู้สึกอิสระที่จะเล่นกับค่าต่างๆ ตราบใดที่คุณยังคงกุญแจไว้เหมือนเดิม
นี่คือค่าที่ฉันจะแทนที่ หากไม่จำเป็นต้องเปลี่ยนค่าในวัตถุเป้าหมาย คุณไม่จำเป็นต้องเรียกค่านั้นอย่างชัดเจนในวัตถุต้นทาง
Object.assign(hpChar, {
firstName: 'Hermione',
lastName: 'Grainger',
pet: {
name: 'Crookshanks',
animal: 'cat'
}
}
);
ครั้งที่สองที่เราบันทึกผลลัพธ์ในคอนโซล ผลลัพธ์จะส่งคืนวัตถุเป้าหมาย โดยเขียนทับคุณสมบัติด้วยค่าใหม่ ตอนนี้คอนโซลของเรามีลักษณะดังนี้:
{ firstName: 'Hermione',
lastName: 'Grainger',
age: 11,
house: 'Gryffindor',
pet: { name: 'Crookshanks', animal: 'cat' } }
นี่คือลักษณะการรวมสองอ็อบเจ็กต์ที่มีคุณสมบัติเหมือนกัน แล้วถ้าเราจะรวมสามวัตถุที่มีคุณสมบัติต่างกันล่ะ? คุณคาดหวังว่าจะเกิดอะไรขึ้น?
var obj1 = {
foo: 1
}
var obj2 = {
bar: 2
}
var obj3 = {
baz: 3
}
Object.assign(obj1, obj2, obj3)
console.log(obj1);
Obj1 เป็น obj เป้าหมายของเรา Obj2 และ obj3 เป็นวัตถุต้นทางของเรา สิ่งเหล่านี้จะรวมเข้ากับวัตถุเป้าหมายของเรา เนื่องจากไม่มีคุณสมบัติทับซ้อนกัน คุณสมบัติทั้งหมดจะถูกรวมเป็น obj1 ด้วยค่าที่เกี่ยวข้อง
{ foo: 1, bar: 2, baz: 3 } ที่นั่นคุณมีมัน! การนำไปใช้งานของ Object.assign() เมื่อคุณเข้าใจแนวคิดที่นี่แล้ว คุณก็เข้าใกล้การเรียนรู้กรอบงาน JavaScript เข้าไปอีกขั้นแล้ว!
พร้อมเพิ่มเติมไหม
ดูบทแนะนำเหล่านี้เพื่อศึกษาต่อ…
JavaScript Object.keys()
คำแนะนำทีละขั้นตอนสำหรับ JavaScript ให้
ประเภทของจาวาสคริปต์
JavaScript String ประกอบด้วย:คำแนะนำทีละขั้นตอน
ตัวแปร JavaScript