2009-12-22 26 views
10

我來自C背景的JavaScript。在JavaScript中,當我使用賦值運算符將一個對象分配給另一個對象時,它是否將值從一個複製到另一個,還是都指向相同的數據?或者在這種情況下,賦值操作符做了什麼?使用Javascript中的賦值運算符設置一個對象等於另一個對象

function point_type() 
{ 
this.x = 0; 
this.y = 0; 
} 

var pnt1 = new point_type(); 
var pnt2 = new point_type(); 

pnt1.x = 4; 
pnt1.y = 5; 

pnt2 = pnt1; 

pnt1.x = 8; 
pnt2.y = 9; 

在上面的例子中,不pnt2.x現在等於8,或者它仍然等於4,或者它仍然等於0?

是的,我意識到我可以自己測試一下,我會在做這件事的時候等待社區拿出答案。然而,我希望我的問題的答案只會回答這一個例子,並且可能會讓我們對JavaScript對象的工作原理和一些最佳實踐有所啓發。

後續問題:
答案似乎是複製引用。 pnt2和pnt1現在指向相同的數據。是否可以設置我的對象,以便複製值?這通常在JavaScript中如何實現?很顯然,我不想每次需要複製這個對象時分別設置每個屬性。

回答

2

它等於8

pnt2 = pnt1 

該聲明指向的對象PNT2向PNT1對象,所以你做PNT1任何修改將在PNT2出現。

1

鑑於您在示例中顯示的對象,它將設置對該對象的引用。如果它是一個原始類型(數字,日期),那麼它會複製該對象。

14

每當我需要副本一個對象到另一個JS,我只是將它轉換爲原始:

var newObject = JSON.stringify(oldObject); 

然後,當我需要使用它:

var evenNewerObj = JSON.parse(newObject); 

希望這幫助某人。

相關問題