2013-01-23 43 views
10

thể trùng lặp:
How do I correctly clone a JavaScript object?đối tượng JavaScript đẩy vào một mảng

tôi có mã này:

var temp = []; 
var obj = {name:"1"}; 
temp.push(obj); 
obj.name = "2"; 
temp.push(obj); 

Những gì tôi đang mong đợi đến mức khó tin:

temp[0].name == "1" && temp[1].name == "2"; 

Điều gì thực sự xảy ra:

temp[0].name == "2" && temp[1].name == "2"; 

Tại sao điều này xảy ra, và làm thế nào tôi có thể nhận được những gì tôi đang mong đợi?

+0

... đó là giải pháp cho http://stackoverflow.com/questions/14417645/javascript-object-cloning/14417676#14417676 –

Trả lời

8

Mảng JavaScript giữ tham chiếu đến đối tượng, thay vì chính đối tượng. Khi bạn đẩy một đối tượng vào mảng nó không tạo ra một đối tượng mới, nhưng nó chỉ đơn giản là đặt một tham chiếu đến đối tượng, rằng obj cũng trỏ đến, vào mảng.

Vì vậy, cuối cùng là obj, temp [0] và temp 1 tất cả các điểm đến cùng một đối tượng. Để thực sự tạo một đối tượng hoàn toàn mới, bạn có thể sử dụng Object.create() hoặc jQuery.extend ({}, obj). Mặc dù trong trường hợp của bạn đủ dễ dàng để tạo một đối tượng đơn giản mới bằng cách sử dụng var newobj = {name="2"}

4

Đối tượng JavaScript được chuyển theo tham chiếu. Trong trường hợp của bạn, bạn chỉ có một đối tượng "obj", và temp [0] và temp [1] đang trỏ đến cùng một đối tượng.

0

obj là đối tượng được thêm bằng tham chiếu trong mảng để bạn thực sự thêm cùng một obj hai lần.

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