是否有可能爲一個變量指向另一個在這樣的陣列,一個變量可能指向另一個變量嗎?
var theArray = [0,1,2,3];
var secondElement = //somehow point to theArray[1]
使得如果我修改theArray[1]
,secondElement
還應當修改,反之亦然(可能的話,不使用函數)?
是否有可能爲一個變量指向另一個在這樣的陣列,一個變量可能指向另一個變量嗎?
var theArray = [0,1,2,3];
var secondElement = //somehow point to theArray[1]
使得如果我修改theArray[1]
,secondElement
還應當修改,反之亦然(可能的話,不使用函數)?
你在問關於引用 - 對於原始值,它不是直接可能在Javascript中。這是可能的W/R/T對象:
C:\WINDOWS>jsdb
js>a = []
js>b = {refToA: a}
[object Object]
js>b.refToA.push(3)
1
js>a
3
js>a.push(4)
2
js>b.refToA
3,4
js>
在上面的例子中,對象b
有一個屬性refToA它包含對象a
;兩者都引用相同的實際對象,因此對象b.refToA
和a
的更改通過訪問它的兩種方式反映出來。如果您重新指定b.refToA
或a
,則此參考被破壞。類似地使用數組:
js>x = {y: 3, toString: function() { return 'y='+this.y; }}
y=3
js>a = [x]
y=3
js>b = [3,x]
3,y=3
js>a[0].y = 22
22
js>b
3,y=22
js>b[1].y = 45
45
js>a
y=45
a[0]
和b[1]
都有一個值,該值是相同的附圖中的對象。
只有當共享對象是一個可變容器時,才能實現您正在查找的效果,以便您的兩個所需變量具有(並且始終具有)相同的值,這是對共享可變容器的引用。您可以更改容器中的值,並且可以通過兩種訪問方式查看它們。原始值(例如數字和字符串)不是可變容器,因此它們不能以這種方式使用。
沒有辦法直接做到這一點。該數組可以是一個對象數組,您可以直接修改對象的屬性而不是數組條目。然後,你將有:
var theArray = [ { value: 0 }, { value: 1 }, { value: 2 }, { value: 3 } ];
var secondElement = theArray[1];
然後改到theArray[1].value
也將是可見的secondElement.value
。
我會提供的觀察,功能是友好的事情,他們不會傷害你,如果你不嘗試和尾巴拿起來。
您可以使用對象的屬性和與對象包裝你的數組:
var a = {arr: [1,2,3,4]};
var b = a;
b.arr[0] = 777;
console.log(a.arr);
這種方法的優點是,你還可以指定新值都a.arr
和b.arr
。
var a = {arr: [1,2,3,4]};
var b = a;
a.arr = [777,888];
console.log(b.arr);
這是我最初的想法。但是我有很多這些,並有許多重複的對象搞亂了代碼。 – Manu 2011-01-20 14:49:12
是的。這是我從C++引用中遺漏的那些東西之一。但是由於我大部分的函數代碼都是一個封裝對象,我現在已經使用了getter和setter .. var obj = {0} {1} [1,2,3], get secondElement(){ return this.a [0]; (){ }返回this.secondElement; } } 我知道getters是「特殊功能」,但他們肯定看起來很乾淨! – Manu 2011-01-20 15:32:43