2012-02-18 196 views
1

我在JavasSript中遇到了一個奇怪的問題。對象參考問題

有三個變量(聲明爲var),它們都存儲一個對象;說var object1object2object3

好吧,我現在所做的是我分配object2=object1object3=object1

當我給object2添加一些東西時,它會自動添加到object3。奇怪? :|

請幫忙。我想我在這裏錯過了一些基本的基礎,但我無法抓住它。

+1

好的,Javascript中的一個'Object'通過引用傳遞。 'object2 = object1'改變'object2'變量來引用'object1'中的對象,它不會複製它。 – 2012-02-18 12:34:15

+1

可能的重複[是否通過引用或值處理對象?](http://stackoverflow.com/questions/2267239/does-javascript-handle-objects-by-reference-or-by-value) – epascarello 2012-02-18 12:35:04

+0

如何可以當object2被修改時,我確定object3不會被修改? – Anupam 2012-02-18 12:35:24

回答

2

因此,如何是很奇怪嗎?

您通過引用該對象並做而不是克隆該對象。因此,將變量object1修改爲object3實際上是指同一個對象,從而「自動更新所有變量」。

+0

如何在不知道對象屬性的情況下克隆對象?謝謝.. – Anupam 2012-02-18 12:38:30

+0

看看[這裏的答案](http://stackoverflow.com/questions/728360/copying-an-object-in-javascript)。 – Sirko 2012-02-18 12:41:20

+0

謝謝你,我做到了這一點,它的作用就像一個魅力! var newObject = jQuery.extend(true,{},oldObject); – Anupam 2012-02-18 12:45:59

2

當您指定opject2 = object1時,您沒有製作object1的副本,只是要求兩個名稱都引用同一個對象。您需要創建一個新對象並將object1中的屬性複製到該對象中。你如何做到這一點取決於你有什麼樣的Javascript庫。

jQuery提供的複製技術described here

+0

那麼,我已經做了如下所示:object3 = new Object(),然後object3 = object1。但問題仍然存在?如果我不知道對象的屬性,有什麼方法可以複製它?我有權訪問jquery 1.7.1;這可以幫助嗎? – Anupam 2012-02-18 12:37:58

+0

對於所有類型的變量都不適用,請參閱@ katspaugh的答案。 – 2012-02-18 12:49:43