我真的無法字的問題隱約少,但我想你會明白......如何通過只是對它們的引用的變量將值分配給對象?
我開發一個JavaScript遊戲引擎,以及Scene
對象,這是很多東西的容器,有一個方法,它應該改變其中的一個數組,特別是那個包含所有可以繪製的東西的方法。
該數組訪問是這樣的:
scene.internals.draw
的問題是,它是在該方法中引用了很多次,我認爲名/路徑可能發生變化。當然,我不希望每次我改變了磁盤陣列的路徑時每個引用更改爲它的方法,所以我這樣做:
var location = scene.internals.draw;
現在的實際方法代碼和算法可以留完好無損,如果場景中數組的名稱/路徑改變,我只需要改變那一行。
它在大多數情況下工作得很好。我可以.push(obj)
它,等等,但在一個點,我需要「disect」的陣列,即劈成兩半,添加的東西,然後把它重新走到一起,就像這樣:
buff1 = location.slice(0, i); //First slice of the array.
buff2 = location.slice(i, location.length); //Second slice of the array.
//Add something in between those slices.
buff1.push(ob);
location = buff1.concat(buff2); //Problems here!
這而location
只是scene.internals.draw
,因爲它直接改變了陣列。但現在,我將新值分配給當地location
變量,而不是所需的scene.internals.draw
!
問題:如何使用=運算符爲「真實」對象分配值而不是包含對這些對象的引用的變量(如location
)?
明顯的解決辦法是這樣,在方法的末尾:
scene.internals.draw = location.slice();
這是確定的,唯一的副作用是我會寫原來的名字兩次,和編輯它兩次,這不是一個很大的問題。但是,我可能會發現自己在其他情況下,我可能需要該功能,所以我仍然喜歡答案。
您可以將位置重寫爲處理get和set的函數。 location()會得到,location(arr)會設置。不知道你是否會用這個號碼來工作 – 2012-07-16 20:52:10
不確定你的意思,@CoryDanielson。 – corazza 2012-07-16 20:53:24
我在想這樣的事情:http://jsfiddle.net/s2QQK/1/但Esailija的答案是非常好的。這個getter/setter是一種令人討厭的 – 2012-07-16 22:18:09