2012-06-16 54 views
5

Câu hỏi khá thẳng về phía trước nhưng Googling chưa bật lên bất kỳ điều gì.Làm cách nào để sao chép/sao chép một thể hiện của đối tượng trong CoffeeScript?

Làm cách nào để sao chép/sao chép/sao chép đối tượng của đối tượng trong Coffeescript? Tôi luôn có thể tạo phương thức clone() trả về một phiên bản mới với các giá trị được sao chép, nhưng điều đó có vẻ giống như một cách dễ bị lỗi.

CoffeeScript có cung cấp giải pháp đơn giản hơn không?

Trả lời

8

Điều này có thể hiệu quả.

clone = (obj) -> 
    return obj if obj is null or typeof (obj) isnt "object" 
    temp = new obj.constructor() 
    for key of obj 
    temp[key] = clone(obj[key]) 
    temp 

nuôi từ: What is the most efficient way to deep clone an object in JavaScript?

+0

Nó nên được 'obj.constructor mới()'. Nếu không, bạn sẽ nhận được một "Không thể chuyển đổi 'temp' thành đối tượng." – dennis

+0

@dennis Cảm ơn dennis. Tôi đã cập nhật mã. –

5

Nhờ Larry Battle for gợi ý:

John Resig của giải pháp của việc sử dụng jQuery.extend hoạt động rực rỡ!

// Shallow copy 
newObject = $.extend({}, oldObject); 

// Deep copy 
newObject = $.extend(true, {}, oldObject); 

Bạn có thể tìm thêm thông tin trong jQuery documentation.

+0

Khi tôi thực hiện việc này, việc thay đổi một thuộc tính trong đối tượng mới sẽ thay đổi trong một đối tượng cũ, vậy đây là "bản sao" như thế nào? –

+0

Hmm, điều đó nghe không đúng :) Bạn có đang chỉnh sửa các thuộc tính nguyên thủy hoặc các thuộc tính phức tạp không? Bạn có thể cần phải sử dụng bản sao sâu nếu bạn đang chỉnh sửa thuộc tính lồng nhau. Đây là câu trả lời ban đầu của John Resig cho JavaScript: http://stackoverflow.com/a/122704/746890 (John là tác giả của jQuery). –

+1

Tôi nghĩ rằng tôi đã sắp xếp nó. Tôi nghĩ rằng nó đã được KnockoutJS gói JS đối tượng của tôi như là một máy ảo KO. –

Các vấn đề liên quan