2012-06-20 75 views
4

只是一個(希望)快速的問題來清除Javascript處理對象的方式。我不習慣JS,所以有點意外,這就是爲什麼我要仔細檢查!Javascript對象多個引用

說我有一個對象:

function food(price) { 
    this.price = price || 100; 
} 

var myFood = new food(100); 

,然後將此對象存儲在兩個數組:

var foo = []; 
var bar = []; 
foo.push(myFood); 
bar.push(myFood); 

我是正確的思維,所有我在這裏做的是存儲參考我的食物?我沒有創建對象的COPY?所以,如果我,說:

foo[0].price = 50; 

將禁止[0]。價格ALSO == 50,因爲它存儲到myFood的引用,它是myFood已經實際上有它的價格的影響,而不是foo或酒吧?

非常感謝提前!我已經看到一些堆棧溢出線程提到這個問題作爲更廣泛的帖子的一部分,但我只是想把它放在那裏以確保! 祝你好運

+3

爲什麼你不只是運行代碼來看? – Esailija

+0

[JavaScript是傳遞引​​用還是傳值語言?]的可能重複(http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass價值語言) –

+0

@Esailija - 感謝您的評論!在我來到SO之前,我曾做過,但我認爲我一定在某個地方錯過了一些比簡單樸素的事實更復雜的東西。 :) – flukeflume

回答

2

是的,javascript只會推送一個引用而不是對象的副本。

+0

太棒了!非常感謝您的快速回復 - 我剛剛在自己和javascript之間看到了美好的未來,感謝您在我眼前展開! :D我會盡快接受,只要它允許我。再次感謝! – flukeflume

2

你是對的。但要做到這一點並且看看會發生什麼,這非常容易。

http://jsfiddle.net/67haQ/

你清楚地似乎知道它是如何工作則已,一點點玩耍確認似乎比一個SO問題更容易。

只是說'

+0

嗨,亞歷克斯,感謝這一點 - 我開始感覺有點愚蠢,因爲它就像你說的那樣對我來說有點愚蠢!我將來一定要記住這一點。 – flukeflume