Hướng dẫn how do you copy an object in javascript? - làm thế nào để bạn sao chép một đối tượng trong javascript?
Có một số vấn đề với hầu hết các giải pháp trên Internet. Vì vậy, tôi quyết định thực hiện theo dõi, bao gồm, tại sao câu trả lời được chấp nhận không nên được chấp nhận. Show
bắt đầu tình huốngTôi muốn kết hợp sâu sắc một JavaScript 4 với tất cả trẻ em và con cái của họ, v.v. Nhưng vì tôi không phải là nhà phát triển bình thường, 4 của tôi có bình thường 6, 7 và thậm chí 8.deep-copy a Javascript 4 with all of its children and their children and so on. But since I'm not kind of a normal developer, my 4 has normal 6, 7 and even 8.Vì vậy, hãy tạo một 9 và 0 trước.
Hãy mang mọi thứ lại với nhau trong một 4 có tên 2.
Tiếp theo, chúng tôi muốn sao chép 2 vào một biến có tên 4 và biến đổi nó.
Bạn biết những gì đã xảy ra ở đây bởi vì nếu không bạn thậm chí sẽ không đáp ứng câu hỏi tuyệt vời này.
Bây giờ chúng ta hãy tìm một giải pháp. JsonNỗ lực đầu tiên tôi đã thử là sử dụng 5.
Đừng lãng phí quá nhiều thời gian cho nó, bạn sẽ nhận được 6.Bản sao đệ quy ("câu trả lời" được chấp nhậnChúng ta hãy xem câu trả lời được chấp nhận.
Có vẻ tốt, heh? Đó là một bản sao đệ quy của đối tượng và cũng xử lý các loại khác, như 7, nhưng đó không phải là một yêu cầu.
Đệ quy và 7 không hoạt động tốt với nhau ... 9Giải pháp gốcSau khi tranh cãi với đồng nghiệp của tôi, ông chủ của tôi đã hỏi chúng tôi chuyện gì đã xảy ra, và anh ấy đã tìm thấy một giải pháp đơn giản sau một số googling. Nó được gọi là 0.
Giải pháp này đã được thêm vào JavaScript một thời gian trước và thậm chí xử lý 9.
... Và bạn thấy đấy, nó không hoạt động với cấu trúc lồng nhau bên trong. polyfill cho giải pháp gốcCó một polyfill cho 0 trong trình duyệt cũ giống như IE 8. Nó giống như một cái gì đó được đề xuất bởi Mozilla, và tất nhiên, nó không hoàn hảo và dẫn đến vấn đề tương tự như giải pháp gốc.
Tôi đã đặt 3 ngoài phạm vi để chúng ta có thể xem xét những gì 4 nói với chúng ta. 0Vấn đề tương tự như giải pháp gốc, nhưng đầu ra tồi tệ hơn một chút. Giải pháp tốt hơn (nhưng không hoàn hảo)Khi đào xung quanh, tôi tìm thấy một câu hỏi tương tự (trong JavaScript, khi thực hiện một bản sao sâu, làm thế nào để tôi tránh một chu kỳ, do một tài sản là "cái này"?) Cho cái này, nhưng với một giải pháp tốt hơn. 1Và chúng ta hãy xem đầu ra ... 2Các yêu cầu được khớp, nhưng vẫn còn một số vấn đề nhỏ hơn, bao gồm thay đổi 5 của 6 và 7 thành 4.
3phần kết luậnGiải pháp cuối cùng sử dụng đệ quy và bộ nhớ cache, có thể không phải là tốt nhất, nhưng đó là một bản sao sâu thực sự của đối tượng. Nó xử lý đơn giản 6, 7 và 0, nhưng nó sẽ làm rối loạn chúng trong khi nhân bản.real deep-copy of the object. It handles simple
6, 7 and 0, but it will mess up the instance of them while cloning.JSfiddle Bạn có thể sao chép một đối tượng?Có một số cách để sao chép một đối tượng, phổ biến nhất là một hàm tạo sao chép hoặc nhân bản. Sao chép được thực hiện chủ yếu để bản sao có thể được sửa đổi hoặc di chuyển, hoặc giá trị hiện tại được bảo tồn. Nếu một trong hai điều này không cần thiết, một tham chiếu đến dữ liệu gốc là đủ và hiệu quả hơn, vì không có sao chép xảy ra.. Copying is done mostly so the copy can be modified or moved, or the current value preserved. If either of these is unneeded, a reference to the original data is sufficient and more efficient, as no copying occurs.
Toán tử nào được sử dụng để sao chép một đối tượng trong JavaScript?Phương thức gán (). Đối tượng. Phương thức gán () được sử dụng để sao chép các giá trị của tất cả các thuộc tính riêng từ một hoặc nhiều đối tượng nguồn sang đối tượng đích. method. The Object. assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object.
JavaScript có thể sao chép đối tượng bằng tài liệu tham khảo không?Chuyển các biến cho các hàm đang hoạt động giống như cách sao chép cho cùng loại dữ liệu trong hầu hết các ngôn ngữ.Trong các loại nguyên thủy JavaScript được sao chép và truyền bởi giá trị và các đối tượng được sao chép và truyền bởi giá trị tham chiếu.objects are copied and passed by reference value.
Làm thế nào để bạn gán một đối tượng cho một đối tượng khác trong JavaScript?Demo javaScript: object.assign ().. const Target = {a: 1, b: 2} ;. const nguồn = {b: 4, c: 5} ;. const returnedTarget = object.gán (mục tiêu, nguồn) ;. Bảng điều khiển.Nhật ký (mục tiêu) ;. Bảng điều khiển.log (returnedTarget === Target) ;. |